【发布时间】:2015-05-01 22:02:56
【问题描述】:
我有一个矩阵,例如 5x5。
[,1] [,2] [,3] [,4] [,5]
[1,] 22 -2 -2 -2 2
[2,] -2 22 2 2 2
[3,] -2 2 22 2 2
[4,] -2 2 2 22 2
[5,] 2 2 2 2 22.
如您所见,矩阵是对称的。
在主对角线上方,有 4+3+2+1=10 个位置,我通过combn 找到所有可能的(排列)矩阵,在这 10 个位置中有 (-2) 3 次。这意味着 10!/3!*7!=120 个矩阵。
但其中一些是等价的。
所以,我的问题是如何从 120 中找到非等价矩阵。
我正在研究置换矩阵,因为如果我选择 120 个矩阵中的一个并使用 rmperm,我会得到 120 个矩阵中的一个(随机)。
当我有 5x5 和 6x6 矩阵时,我没有问题,因为我已经开发了一种算法。但现在我想在 7x7 矩阵中做同样的事情,但算法很慢,因为我有很多循环。
所以,我想用一个命令,当我从 120 个矩阵中选择一个矩阵时,给我 120 个矩阵中的所有排列矩阵。
非常感谢!
【问题讨论】:
-
如果,正如 josilber 所说,您正在寻找所有行和列排列,那就是 n!^2。对于 10x10 矩阵,超过 13 个 trillion 矩阵,这可能太多了,无法先创建然后挑选出唯一的矩阵。是否有任何对称或结构可以用来缩小问题?
-
Gregor,我使用的矩阵是对称的。
-
在非对角线位置上是否总是只有 2 个数字(上例中的 -2 和 2)?例如,如果你在这 10 个位置中有 1 到 10 的数字,那么就会有 10 个!它们的排列,所有这些都是独一无二的。在上面的示例中,您能够说只有 120 个排列(不一定都是唯一的)的唯一原因是因为您假设只有两个唯一值,拆分 7/3。
-
正是 josilber!我总是在非对角线位置上只有 2 个数字(2 和 -2)!
-
基本上你想要的是多重集的排列。包
iterpc将完成这项工作。
标签: r algorithm matrix permutation