微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用适当的填充将整数转换为二进制数组

如何解决使用适当的填充将整数转换为二进制数组

您应该能够对此进行矢量化处理,例如

>>> 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)。如果m32应该转换(0,0)

我试过了,np.unpackbits(np.uint8(num))但是没有给出正确长度的数组。例如,

np.unpackbits(np.uint8(15))
Out[5]: array([0,1],dtype=uint8)

我想要一种适用m于代码中所有内容的方法。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。