我有一个 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']
Run Code Online (Sandbox Code Playgroud)
你可能最终不得不重塑。
| 归档时间: |
|
| 查看次数: |
2124 次 |
| 最近记录: |