numpy有一个库函数,np.unpackbits
,它将把auint8
解包成长度为8的位向量。是否有相应快速的方法来解包较大的数字类型?例如uint16
或uint32
。我正在研究一个涉及数字之间频繁转换、数组索引及其位向量表示的问题,而瓶颈是我们的打包和解包函数。
最佳答案
您可以使用view
和unpackbits
输入:
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并根据需要应用那里的建议。