我打算生成一个(64,6)数组,其中包含每个数字的二进制位数组(0到63)
我已经找到了如下逻辑:
[int(x) for x in bin(63)[2:]]
[1, 1, 1, 1, 1, 1]
[int(x) for x in bin(60)[2:]]
[1, 1, 1, 1, 0, 0]
[int(x) for x in bin(3)[2:]]
[1, 1]
我的期望输出是这样的:
[[0,0,0,0,0,0],
[0,0,0,0,0,1],
[0,0,0,0,1,0],
[0,0,0,0,1,1],
...
[1,1,1,1,1,0],
[1,1,1,1,1,1]]
然而,以下代码不起作用
x = np.arange(0,64)
[int(i) for i in bin(x)[2:]]
答案 0 :(得分:0)
您似乎正在尝试生成从0
到64
的所有二进制数字序列。在这种情况下,你真的有两个循环,所以你需要两个列表推导。
x = np.arange(0, 64)
[ [int(i) for i in bin(y)[2:]] for y in x ]
如果你想要填充值,使它们的长度都相同,你可以自己填充结果列表元素。
x = np.arange(0, 64)
a = [ [int(i) for i in bin(y)[2:]] for y in x ]
list(map(lambda x: [0] * (6 - len(x)) + x, a))
答案 1 :(得分:0)
可以使用for
循环和字符串列出转换:
for i in range(64):
s = str(bin(i))[2:] # create binary value, convert to string and remove initial '0b'
while len(s) < 6: # add leading 0s if needed
s = "0"+s
lst = list(s) # convert to list
lst = list(map(lambda x: int(x), lst)) # convert each element from string to integer
print(lst)
输出:
[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]