我使用一段代码创建了一个2D二进制值数组,以覆盖事件的所有可能场景。在第一轮中,我用两名成员对其进行了测试
这是我的密码:
number_of_members = 2
n = number_of_members
values = np.arange(2**n, dtype=np.uint8).reshape(-1, 1)
print('$$$ ===> ', values)
bin_array = np.unpackbits(values, axis=1)[:, -n:]
print('*** ===> ', bin_array)
结果是:
$$$ ===> [[0]
[1]
[2]
[3]]
*** ===> [[0 0]
[0 1]
[1 0]
[1 1]]
如您所见,它正确地提供了我的2D二进制数组
当我打算使用number_of_members = 20
时,问题就开始了。如果我将20分配给number_of_members
,python将显示以下结果:
$$$ ===> [[ 0]
[ 1]
[ 2]
...
[253]
[254]
[255]]
*** ===> [[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 1]
[0 0 0 ... 0 1 0]
...
[1 1 1 ... 1 0 1]
[1 1 1 ... 1 1 0]
[1 1 1 ... 1 1 1]]
结果有8列,但我希望数组有32列。如何解压缩uint32
数组
正如您正确指出的,^{} 只在} :
uint8
数组上运行。很好的一点是,您可以将任何类型视为uint8
。您可以像这样在数据中创建一个uint32
^{在我的机器上,这是小endian,它使修剪更容易。您可以在所有系统中有条件地强制小端点顺序:
现在你可以把这些东西拆开了。事实上,
unpackbits
有一个我个人添加的很好的特性,count
参数。它允许您将输出长度精确地设置为20位,而不是完整的32位,而无需进行子集设置。由于输出将混合使用大端位和小端位字节,因此我建议也以小端位顺序显示这些位,并翻转整个结果:结果是一个
(1<<20, 20)
数组,具有您想要的精确值相关问题 更多 >
编程相关推荐