我需要一种方法将2000万个32位和64位整数转换成相应的位数组(因此这必须是内存/时间效率)。根据SO上不同question/answer的建议,我尝试使用numpy.unpackbits
来做到这一点。在试验这种方法时,我遇到了意想不到的结果:
np.unpackbits(np.array([1], dtype=np.uint64).view(np.uint8))
产生
array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=uint8)
我希望1
元素是最后一个元素,但不是中间元素。所以我显然遗漏了保留字节顺序的东西。我错过了什么?
答案 0 :(得分:6)
尝试:dtype='>i8'
,如下:
In [6]: np.unpackbits(np.array([1], dtype='>i8').view(np.uint8))
Out[6]:
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], dtype=uint8)
参考:
http://docs.scipy.org/doc/numpy/user/basics.byteswapping.html