使用numpy将int转换为位数组

时间:2016-05-12 16:04:49

标签: python python-3.x numpy

我需要一种方法将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元素是最后一个元素,但不是中间元素。所以我显然遗漏了保留字节顺序的东西。我错过了什么?

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