numpy packbits打包到uint16数组

时间:2018-04-12 08:14:53

标签: python-3.x numpy

我有一个3D numpy位数组,我需要沿第三轴打包它们。所以numpy.packbits正是如此。但不幸的是它只将它打包到uint8,但我需要更多的数据,有没有类似的方法将它打包到uint16或uint32?

1 个答案:

答案 0 :(得分:3)

根据机器的字节顺序,可以是简单的视图转换或字节交换,然后查看转换:

>>> a = np.random.randint(0, 2, (4, 16))
>>> a
array([[1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0],
       [0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1],
       [0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1],
       [1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1]])
>>> np.packbits(a.reshape(-1, 2, 8)[:, ::-1]).view(np.uint16)
array([53226, 23751, 25853, 64619], dtype=uint16)

# check:
>>> [bin(x + (1<<16))[-16:] for x in _]
['1100111111101010', '0101110011000111', '0110010011111101', '1111110001101011']

你可能最终需要重塑。