【发布时间】:2021-05-09 10:34:00
【问题描述】:
Numpy 提供packbits 函数将值转换为单个位。使用 bitorder='little' 我可以在 C 中将它们读取为 uint8_t 值而不会出现问题。但是,我想将它们读取为 uint32_t 值。这意味着我必须颠倒每 4 个字节的顺序。
我尝试使用
import numpy as np
array = np.array([1,0,1,1,0,1,0,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,1,1,0,0,1,0,1,0,1,
1,0,0,1,1,0,1,0,1,1,0,0,1,1,1,0,0,1])
array = np.packbits(array, bitorder='little')
array.dtype = np.uint32
array.byteswap(inplace=True)
print(array)
但出现以下错误:
Traceback (most recent call last):
File "sample.py", line 5, in <module>
array.dtype = np.uint32
ValueError: When changing to a larger dtype, its size must be a divisor of the total size in bytes of the last axis of the array.
我在输入中有 50 位。以 little-endian 格式写入的第一个 32 位块(最早的输入位是最低有效位)是0b10101001101011001101001010101101 = 2846675629,第二个是0b100111001101011001 = 160601。所以预期的输出是
[2846675629 160601]
【问题讨论】:
-
@Curious 以后,请提供完整错误堆栈跟踪,而不仅仅是底线。它将帮助人们更快地帮助您,并将大大减少您的问题被关闭的机会。还包括预期输出。
-
您期望的输出是什么?
-
另请注意,来自
packbitsdoc:“类型为 uint8 的数组,其元素表示对应于输入元素的逻辑(0 或非零)值的位。packed 的形状具有相同的数字尺寸作为输入(除非轴是无,在这种情况下输出是一维)。” - 返回一个 uint8。
标签: python python-3.x numpy bit-manipulation endianness