如何使用Numpy将uint32数组转换为形状为(2,128)的布尔二进制数组
Numpy实现uint32数组转二进制位布尔数组方案
实现代码
import numpy as np # 原始数组 a = np.array([[3701687786, 458299110, 2500872618, 3633119408], [2377269574, 2599949379, 717229868, 137866584]], dtype=np.uint32) # 生成32位的移位序列,顺序可根据位排序需求调整 # 此处为从最高位到最低位排列,若要反过来换成 np.arange(32, dtype=np.uint32) 即可 shift_bits = np.arange(31, -1, -1, dtype=np.uint32) # 每个uint32元素拆分为32个二进制位 splited_bits = ((a[..., np.newaxis] >> shift_bits) & 1).astype(bool) # 合并维度得到目标形状 result = splited_bits.reshape(2, 128)
结果验证
- 输出形状:
result.shape为(2, 128) - 数据类型:
result.dtype为bool
补充说明
你之前使用struct.pack的方案需要额外处理字节序、字节转位的步骤,且无法完全利用numpy的向量化运算优势,直接用位运算拆分的方式更可控高效,也能避免字节序不一致导致的结果不符合预期问题。
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

