用逻辑计算生成数组

时间:2018-01-05 06:40:28

标签: python arrays numpy

我打算生成一个(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:]]

2 个答案:

答案 0 :(得分:0)

您似乎正在尝试生成从064的所有二进制数字序列。在这种情况下,你真的有两个循环,所以你需要两个列表推导。

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]