Python 生成所有列和为正的行随机0-1矩阵的最佳方法?
我试图高效地生成所有9×3矩阵的列表,其中每个矩阵满足以下属性:Python 生成所有列和为正的行随机0-1矩阵的最佳方法?,python,arrays,linear-algebra,Python,Arrays,Linear Algebra,我试图高效地生成所有9×3矩阵的列表,其中每个矩阵满足以下属性: 每个条目都是0或1 每行和为1 每列至少包含一个1 我的第一个方法如下: 生成大小为9×3的所有0-1矩阵的列表a import numpy as np import itertools n=9 k=3 A=[np.reshape(np.array(i), (n,k)) for i in itertools.product([0, 1], repeat = n*k)] 从列表A中提取行和为1且列至少包含一个正条目的值
import numpy as np
import itertools
n=9
k=3
A=[np.reshape(np.array(i), (n,k)) for i in itertools.product([0, 1], repeat = n*k)]
matrix_list=[]
N=len(A)
for k in range(N):
B=A[k]
if (np.sum(B,axis=0)>1).all() and (np.sum(B,axis=1)==1).all():
matrix_list.append(B)
S=np.matrix([[1,0,0],[1,0,0],[1,0,0],[1,0,0],[1,0,0],[1,0,0],[1,0,0],[1,0,0],[1,0,0]])
并创建所有可能的矩阵,这些矩阵由每行中的置换条目产生,但不包括列和(无论是第0列还是第1列)为零的两个矩阵?一位不关注我的问题的朋友建议这样做,这很有效:
from itertools import combinations
matrices=[]
nine=set(range(9))
for i in range(1,9):
for combinationI in combinations(nine,i):
m=[0]*9
for cI in combinationI:
m[cI]=[1,0,0]
remaining=nine.difference(combinationI)
for j in range(1,9-i):
for combinationJ in combinations(remaining,j):
matrix=m[:]
for cJ in combinationJ:
matrix[cJ]=[0,1,0]
r=remaining.difference(set(combinationJ))
for cR in r:
matrix[cR]=[0,0,1]
matrices.append(matrix)