首页 > 解决方案 > 将 numpy 的 1 和 0 数组打包成 32 位值数组

问题描述

我在一个 numpy 整数数组中有一个 1 和 0 的一维数组,我想将这些值打包在一个无符号 32 位整数值数组中。

例如,假设整数数组是

{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

我想把它转换成这个

{0b01111111111000000000000111111111,0b11111111111111110000111111111111}

我怎样才能做到这一点?提前致谢

标签: pythonarraysnumpy

解决方案


您使用 bitshift 将数字移动到正确的二进制索引。然后只是累积值。

(d << np.arange(len(d))).sum()

这里有一个更广泛的版本:

# first, extend to a multiple of 32
d = np.append(d, np.zeros(len(d) & 31, dtype=d.dtype))
# reshape into Nx32
d = d.reshape((-1, 32))
# broadcasted bitshift
bits = d << np.arange(32, dtype=d.dtype))
# accumulate into one value per row
bits = bits.sum(axis=1)

推荐阅读