如何解决使用适当的填充将整数转换为二进制数组
您应该能够对此进行矢量化处理,例如
>>> d = np.array([1,2,3,4,5])
>>> m = 8
>>> (((d[:,None] & (1 << np.arange(m)))) > 0).astype(int)
array([[1, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0, 0],
[1, 1, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0, 0, 0],
[1, 0, 1, 0, 0, 0, 0, 0]])
它只是获得适当的位权重,然后按位取和:
>>> (1 << np.arange(m))
array([ 1, 2, 4, 8, 16, 32, 64, 128])
>>> d[:,None] & (1 << np.arange(m))
array([[1, 0, 0, 0, 0, 0, 0, 0],
[0, 2, 0, 0, 0, 0, 0, 0],
[1, 2, 0, 0, 0, 0, 0, 0],
[0, 0, 4, 0, 0, 0, 0, 0],
[1, 0, 4, 0, 0, 0, 0, 0]])
有很多方法将其转换为1秒无论它是非零的(> 0)*1
,.astype(bool).astype(int)
等我选择了一个基本上是随机的。
解决方法
我的整数范围是0..2**m - 1
,我想将它们转换为length的二进制numpy数组m
。例如,说m = 4
。现在15 =1111
为二进制,因此输出应为(1,1,1)
。 2 =
10
以二进制形式,因此输出应为(0,0
)。如果m
是3
则2
应该转换(0,0)
。
我试过了,np.unpackbits(np.uint8(num))
但是没有给出正确长度的数组。例如,
np.unpackbits(np.uint8(15))
Out[5]: array([0,1],dtype=uint8)
我想要一种适用m
于代码中所有内容的方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。