numpy有一个库函数,np.unpackbits,它将把auint8解包成长度为8的位向量。是否有相应快速的方法来解包较大的数字类型?例如uint16uint32。我正在研究一个涉及数字之间频繁转换、数组索引及其位向量表示的问题,而瓶颈是我们的打包和解包函数。

最佳答案

您可以使用viewunpackbits
输入:

unpackbits(arange(2, dtype=uint16).view(uint8))

输出:
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0]

对于我的机器来说,这在7毫秒左右是相当快的。
%%timeit
unpackbits(a.view(uint8))

100 loops, best of 3: 7.03 ms per loop

至于endianness,您必须查看http://docs.scipy.org/doc/numpy/user/basics.byteswapping.html并根据需要应用那里的建议。

08-25 01:19