为了生成1&0和0的所有组合,我们使用简单的二进制表。如何在数组中轻松创建此二进制表?

时间:2017-03-10 04:27:16

标签: python python-3.x

例如3位的二进制表:

0 0 0

0 0 1

0 1 0

1 1 1

1 0 0 

1 0 1

我想把它存储到一个n * n * 2数组中,所以它会是:

0 0 0
0 0 1
0 1 0
1 1 1
1 0 0 
1 0 1

3 个答案:

答案 0 :(得分:1)

大多数人都希望在

中使用2 ^ n x n
np.c_[tuple(i.ravel() for i in np.mgrid[:2,:2,:2])]
# array([[0, 0, 0],
#        [0, 0, 1],
#        [0, 1, 0],
#        [0, 1, 1],
#        [1, 0, 0],
#        [1, 0, 1],
#        [1, 1, 0],
#        [1, 1, 1]])

说明:此处使用的np.mgrid创建单位多维数据集角的坐标,恰好是0和1的所有组合。然后将各个坐标进行拉伸并按np.c_列作为列连接

答案 1 :(得分:1)

为了自动生成组合,您可以使用itertools.product标准库,它生成所提供的不同序列的所有可能组合,即。即跨输入迭代的笛卡尔积。 repeat参数派上用场,因为这里的所有序列都是相同的范围。

from itertools import product
x = [i for i in product(range(2), repeat=3)]

现在,如果我们想要一个数组而不是那个元组列表,我们可以将它传递给numpy.array。

import numpy as np
x = np.array(x)

# [[0 0 0]
# [0 0 1]
# [0 1 0]
# [0 1 1]
# [1 0 0]
# [1 0 1]
# [1 1 0]
# [1 1 1]]

如果您希望单个列表中的所有元素都可以使用单个索引对它们进行索引,那么您可以链接迭代:

from itertools import chain, product
x = list(chain.from_iterable(product(range(2), repeat=3)))

result: [0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1]

答案 2 :(得分:0)

这是一个递归的,原生的python(无库)版本:

 {
  accounts (
   filter: "{\"fieldName\":\"id\",\"fieldValues\":[\"123\"],\"filterType\":\"in\"}"
  ){ id }
 }

它打印所有可能的:

def allBinaryPossiblities(maxLength, s=""):
    if len(s) == maxLength:
        return s
    else:
        temp = allBinaryPossiblities(maxLength, s + "0") + "\n"
        temp += allBinaryPossiblities(maxLength, s + "1")
        return temp

print (allBinaryPossiblities(3))