【发布时间】:2014-03-13 08:01:21
【问题描述】:
我正在寻找一种在 python 中的方法:一次仅通过矩阵的某些块进行置换。
具体来说,我想要一个矩阵,其中:
- 对角线由大小为 n 且全为零的正方形块组成
- 将其余的行和列分成大小相等的块,并在矩阵中将该块的大小代入每个块中。
- 在这个新矩阵上运行测试,如果失败,将新矩阵替换为 P
如果不是很清楚,这是我想要的图像: http://s27.postimg.org/syimn1zvn/photo.jpg
其中 P[i] 是由一行定义的矩阵:
for per in itertools.permutations(range(n)):
matrix = [[0 for x in xrange(n)] for x in xrange(n)]
for i, j in enumerate(per):
matrix[i][j] = 1
print matrix
如果这些行之一在输入矩阵后不能给出满意的结果,我想用第二行替换那个块。
现在,我做了类似的工作,我只用拼接特定的线,然后遍历所有可能的排列,例如:
row = list(perm_unique([1,0])) #this gives the unique permutations of the items
zs = list((0,0))
for a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12 in product(row, repeat=12):
M, N, O, P, Q, R, = ([] for i in range(6))
M = list(chain(zs,a1,a2))
N = list(chain(zs,a3,a4))
O = list(chain(a5,zs,a6))
P = list(chain(a7,zs,a8))
Q = list(chain(a9,a10,zs))
R = list(chain(a11,a12,zs))
A = list()
A.append(M)
A.append(N)
A.append(O)
A.append(P)
A.append(Q)
A.append(R)
B = np.asarray(A)
不幸的是,我发现很难找到一种方法来执行相同的过程,但使用块或小矩阵而不是简单的线条。如果有人可以给我任何想法或批评。我刚刚学习如何编写 Python 代码不到 2 周,所以很想听听任何人的建议。
【问题讨论】:
-
使用 numpy,它具有用于寻址矩阵块的本机语法。
-
这个问题现在看起来很荒谬,因为我有几年的经验。
-
(几年前的最后一次编辑非常激烈,通常被认为是故意破坏。它可能比以前的版本更好,所以我已经回滚了)。
-
不客气@par,这是服务的一部分。
:-)
标签: python algorithm matrix permutation