在python中生成所有可能的n*n二进制矩阵

在python中生成所有可能的n*n二进制矩阵,python,matrix,adjacency-matrix,Python,Matrix,Adjacency Matrix,我正在玩图形和python,并且我正在尝试测试所有可能的表示邻接矩阵的方阵(即0和1的矩阵)上的一些代码 我们知道nxn有2^{n^2}个可能的矩阵 在python中生成所有可能的n x n二进制矩阵的最佳代码是什么?因为我在任何地方都找不到解决方案,我认为为其他人留出一些时间可能会有帮助 def generateAllBinaryMatrix(n): G = np.zeros([n,n]) cordx=[] cordy=[] for x in range(0,

我正在玩图形和python,并且我正在尝试测试所有可能的表示邻接矩阵的方阵(即0和1的矩阵)上的一些代码

我们知道nxn有2^{n^2}个可能的矩阵


在python中生成所有可能的n x n二进制矩阵的最佳代码是什么?

因为我在任何地方都找不到解决方案,我认为为其他人留出一些时间可能会有帮助

def generateAllBinaryMatrix(n):
    G = np.zeros([n,n])

    cordx=[]
    cordy=[]
    for x in range(0,n):
        for y in range(0,n):
            cordx.append(x)
            cordy.append(y)

    cx=np.array(cordx)
    cy=np.array(cordy)
    indices=(cx,cy)
    print indices
    raw_input()
    for j in range(0,2**(indices[0].size)):
        G[indices] = [1 if digit=='1' else 0 for digit in bin(j)[2:].zfill(indices[0].size)]
        yield (G)

我认为通过使用
numpy
的数学运算,而不是字符串运算,可以更有效地计算结果。尝试:

shift = np.arange(n*n).reshape(n, n)
for j in range(2**(n*n)):
    yield j >> shift & 1
您也可以使用numpy来并行化
j
循环,但这可能比当前的生成器版本占用更多的内存