Python 枚举二进制变量的所有可能值组合

Python 枚举二进制变量的所有可能值组合,python,arrays,binary,iteration,enumeration,Python,Arrays,Binary,Iteration,Enumeration,假设我有n个变量,每个变量有两个值:0或1。如果我想列举所有可能的值的组合,那将是2^n个可能的组合。我想知道如何以一种干净简单的方式生成这个 想象n=4。我们希望生成一个numpy数组或类似的东西,如下面手动生成的示例 [[0 0 0 0] [0 0 0 1] [0 0 1 0] [0 0 1 1] [0 1 0 0] [0 1 0 1] [0 1 1 0] [0 1 1 1] [1 0 0 0] [1 0 0 1] [1 0 1 0] [1 0 1 1] [1 1 0

假设我有n个变量,每个变量有两个值:0或1。如果我想列举所有可能的值的组合,那将是2^n个可能的组合。我想知道如何以一种干净简单的方式生成这个

想象n=4。我们希望生成一个numpy数组或类似的东西,如下面手动生成的示例

[[0 0 0 0]
 [0 0 0 1]
 [0 0 1 0]
 [0 0 1 1]
 [0 1 0 0]
 [0 1 0 1]
 [0 1 1 0]
 [0 1 1 1]
 [1 0 0 0]
 [1 0 0 1]
 [1 0 1 0]
 [1 0 1 1]
 [1 1 0 0]
 [1 1 0 1]
 [1 1 1 0]
 [1 1 1 1]]
请注意,排序很重要。第一列始终查看col1=0的情况,然后转到col1=1的情况。然后,col2研究了这样的情况,其中col2=0给出了col1=0,col2=1给出了col1=0,col2=0给出了col1=1,最后col2=1给出了col1=1。等等基本上,我需要这种排序方法来保持n


这可以通过迭代方法解决吗?

itertools.product([0,1],repeat=4)
将给出一个生成这样一个序列的迭代器
np.array(list(itertools.product([0,1],repeat=4))
将为您提供一个numpy数组。

好的,这只是在0到2^n之间的数字上迭代,然后以二进制表示法打印,所以我想这将以一种简单的迭代方式工作:

n=int(输入())
对于范围(0,功率(2,n))内的i:
cur=“”
对于范围(0,n)内的j:

如果我&(1这里有一个纯粹的numpy解决方案:

import numpy as np


def bin_array(n):
    numbers = np.arange(2 ** n).reshape(2 ** n, 1)
    exponents = (2 ** np.arange(n))[::-1]
    return ((exponents & numbers) > 0).astype(int)


print(bin_array(4))

使用
n=3进行演练

编号将变为:

[[0]
 [1]
 [2]
 [3]
 [4]
 [5]
 [6]
 [7]]
[4 2 1]
指数将变为:

[[0]
 [1]
 [2]
 [3]
 [4]
 [5]
 [6]
 [7]]
[4 2 1]
(指数和数字)
数字
中每行的按位and应用于所有
指数

[[0 0 0]
 [0 0 1]
 [0 2 0]
 [0 2 1]
 [4 0 0]
 [4 0 1]
 [4 2 0]
 [4 2 1]]
((指数和数字)>0)。aType(int)
将其减少为0和1:

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

itertools
是否保证输出的格式始终如此?@flakes“嵌套循环就像里程表一样循环,最右边的元素在每次迭代中前进。此模式创建字典顺序,因此如果输入的iterables被排序,则产品元组将按排序顺序发出。”-。这太棒了!谢谢!这也是一个简洁的解决方案。谢谢分享!