编辑:一个相关的问题是How to move larger values close to matrix diagonal in a correlation matrix这个问题是关于实现相同的,但在R
给定一个矩阵(或R中的表)
m <- matrix(c(5,25,8,4,2,10,20,3,1),ncol=3,byrow=TRUE)
colnames(m) <- c("L","M","H")
rownames(m) <- c("A","B","C")
tax <- as.table(m)
tax
L M H
A 5 25 8
B 4 2 10
C 20 3 1
字符串
我想重新排列矩阵,使对角元素最大。
H L M
B 10 4 2
C 1 20 3
A 8 5 25
型
R语言中有什么好用的函数吗?
4条答案
按热度按时间vyswwuz21#
字符串
mwg9r5ms2#
我不认为Rohit Arora的解决方案完全符合您的要求,因为它将由前一行的最大值引导。因此,它实际上并不是在优化意义上最大化对角线。
我在其他地方找到了一个类似问题的答案,我认为它可能有用:
http://r.789695.n4.nabble.com/reordering-of-matrix-rows-to-maximize-the-sum-of-the-diagonal-tt2062867.html#a2065679
字符串
它使用匈牙利方法来优化矩阵A到目标矩阵B的重新排序。
NB这是我的第一篇文章,所以我没有评论之前的答案的声誉,但我希望这有帮助!
s5a0g9ez3#
我最近遇到了一个类似的问题,写了一个简单的函数来最大化一个方阵对角线上的元素之和。它不检查矩阵是否平方(它可以很容易地实现)。另外,要小心非常大的矩阵,因为排列的数量是列数的阶乘。
字符串
ntjbwcob4#
您可以简单地使用
order
+which.max
来重新排列行和列,如下所示字符串