【问题标题】:Reorder symmetric matrix in R在R中重新排序对称矩阵
【发布时间】:2021-01-04 22:13:57
【问题描述】:

已编辑:假设我有一个对称矩阵,如下所示。

dat<-c(NA,2,3,4,5,2,NA,8,9,10,3,8,NA,14,15,4,9,14,NA,20,5,10,15,20,NA)
x<-matrix(dat,nrow = 5,dimnames = list(c("A","B","C","D","E"),c("A","B","C","D","E")))
x

我正在尝试查看是否有任何方法可以使用 R 对矩阵进行重新排序,使最大值更接近对角线,将下三角形每列的最大值作为第一个对角线中的项目,并且它保持其对称性。这是卡片分类的问题。

这是所需的输出:

result<-c(NA,20,15,10,5,20,NA,14,9,4,15,14,NA,8,3,10,9,8,NA,2,5,4,3,2,NA)
y<-matrix(result,nrow = 5,dimnames = list(c("E","D","C","B","A"),c("E","D","C","B","A")))
y

【问题讨论】:

  • 不是(相对)大的 14x14 矩阵,您可以编辑您的问题以提供更小的示例吗?导入、理解您的问题和调试解决方案将更容易。也许给出一个 4x4 或 5x5 的示例,使用有效的 R 语法,并显示输入和所需的输出?
  • 我认为一个可行的例子可以解决这个问题,但我想确保我理解。通过“重新排序”,您是否要重新排序下三角形中 within 列中的值?还是行内?还是两者之一?
  • 我已将我的问题编辑为一个 5x5 示例,并且还包括了结果应该是什么样子。
  • 是否需要通过交换完整的行来尝试?
  • 是的,对列进行排序后,行也必须更改,以保持对称矩阵。

标签: r matrix


【解决方案1】:

在检查包含文档之间相似性的矩阵时,我有类似的要求。

k <- apply(x, 1, max, na.rm=TRUE)
order <- sort(k, decreasing=TRUE, index.return=TRUE)$ix
x[order, order]

我在每一行上使用max 来找到每行的最大值。 na.rm 确保不考虑对角线。 sort 然后提供所需的顺序作为向量。按照该顺序重新组织矩阵就像x[order, order] 一样简单。

【讨论】:

  • 谢谢詹姆斯。这很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-12
  • 2021-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多