numpy packbits 打包到 uint16 数组

ZZM*_*ZZM 5 numpy python-3.x

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

Pau*_*zer 9

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

>>> 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']
Run Code Online (Sandbox Code Playgroud)

你可能最终不得不重塑。