如何将仅含0和1的numpy一维数组打包为32位无符号整数数组
01数组打包为无符号32位整数的实现方法
你可以通过以下numpy操作完成需求,位顺序和你给出的示例一致(数组首元素对应32位整数的最高位):
- 先对原01数组补0,让总长度为32的整数倍,避免分组时报错
- 将补全后的数组按每32个元素为一组拆分
- 每组元素对应位权重求和后转成uint32类型即可
代码示例
import numpy as np # 你的示例输入数组 input_arr = np.array([0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1], dtype=np.uint8) # 计算需要填充的0的个数,保证总长度是32的倍数 pad_len = (32 - len(input_arr) % 32) % 32 # 示例中为高位补0,所以填充在数组开头;如果需要低位补0,改为(0, pad_len)即可 padded_arr = np.pad(input_arr, (pad_len, 0), constant_values=0) # 按32个元素为一组拆分 grouped_arr = padded_arr.reshape(-1, 32).astype(np.uint32) # 生成位权重:最高位对应2^31,最低位对应2^0 bit_weights = np.array([1 << i for i in reversed(range(32))], dtype=np.uint32) # 每组计算对应的uint32数值 result = (grouped_arr * bit_weights).sum(axis=1).astype(np.uint32) # 输出二进制验证结果 for val in result: print(bin(val))
运行以上代码输出的二进制结果和你给出的预期完全一致。如果你的需求是数组首元素对应32位整数的最低位,仅需把bit_weights的生成逻辑改为np.array([1 << i for i in range(32)], dtype=np.uint32)即可。
内容的提问来源于stack exchange,提问作者kayra ertugral
相关产品推荐
相关产品推荐

