【发布时间】:2020-02-16 13:53:29
【问题描述】:
我正在尝试有效地生成所有 9×3 矩阵的列表,其中每个矩阵都满足以下属性:
- 每个条目都是 0 或 1。
- 每行总和为 1。
- 每一列至少包含一个 1。
我的第一种方法如下:
-
生成一个包含所有 0-1 大小为 9×3 的矩阵的列表 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 且列中至少包含一个正数项的项:
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 产生的:
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 列)为零的两个矩阵?
【问题讨论】:
标签: python arrays linear-algebra