numpy packbits pack to uint16 array



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

根据机器的字节序,要么是简单的视图转换,要么是字节交换,然后是视图转换:

>>> 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']

你最终可能不得不重塑。

最新更新