我正在寻找一种方法来生成n 1&n的nXn矩阵的所有组合,其他所有位置都包含0' s。例如,如果我从3x3零矩阵开始
dim = 3
m = np.zeros((dim, dim), dtype=np.int)
也就是说,如果n是i,则有(暗淡*暗淡)!/((暗淡*暗淡) - i)!表示。
似乎生成n 1 * dim * dim矩阵的生成器解决方案采用 dim 和 n 参数并生成(dim *)昏暗)!/((暗淡*暗淡) - i)!陈述。
答案 0 :(得分:2)
这是这些矩阵的生成器:
import numpy as np
from itertools import combinations
def generate_representations(dim, n, dtype=int):
assert n <= dim * dim
for ind in combinations(range(dim * dim), n):
mat = np.zeros(dim * dim, dtype=dtype)
if ind:
mat[np.array(ind)] = 1
yield mat.reshape(dim, dim)
它返回一个唯一dim
x dim
矩阵的生成器,其中的条目由n
个组成,其余条目为零。
请注意,对于dim=3
和n=2
,它会正确删除重复项并返回36个结果(9 * 8 / 2
),而不是您在问题中指出的72个结果:
mats = list(generate_representations(3, 2))
len(mats)
# 36
mats[10]
# array([[ 0., 1., 0.],
# [ 0., 1., 0.],
# [ 0., 0., 0.]])