用对角线索引矩阵中的上三角形或下三角形

Posted

技术标签:

【中文标题】用对角线索引矩阵中的上三角形或下三角形【英文标题】:indexing upper or lower triangle in matrix with diagonal 【发布时间】:2014-06-29 00:10:44 【问题描述】:

如何索引包括对角线的上三角矩阵或下三角矩阵?

我的矩阵是这样的:

          [,1]      [,2]     [,3]     [,4]      [,5]     [,6]     [,7]      [,8]
[1,] 70.291456        NA       NA       NA        NA       NA       NA        NA
[2,] 47.059392 31.505769       NA       NA        NA       NA       NA        NA
[3,]  6.019712  4.030134 0.515524       NA        NA       NA       NA        NA
[4,]  2.993088  2.003841 0.256326 0.127449        NA       NA       NA        NA

我拥有的是这样的:

rows = 10    
cbind(row = unlist(lapply(2:rows, function(x) x:rows), use.names = FALSE), 
      col = rep(z[-length(z)], times = rev(tail(z, -1))-1))

上述代码的输出如下所示:

     row col
[1,]   2   1
[2,]   3   1
[3,]   4   1
[4,]   5   1
[5,]   6   1
[6,]   7   1
[7,]   8   1

但这不包括我保存在矩阵中的对角线(第 2 行应该与 [,1] 和 [,2] 匹配,但不匹配)。

【问题讨论】:

你试过?lower.tri函数吗? 你试过搜索吗? 【参考方案1】:

如果目标是获取下对角线和对角线的行号和列号,那么如果m 是输入矩阵,那么这里有两种解决方案:

1)

ok <- lower.tri(m, diag = TRUE)
cbind(row = row(m)[ok], col = col(m)[ok])

2)

g <- expand.grid(row = 1:nrow(m), col = 1:ncol(m)) # grid
g[lower.tri(m, diag = TRUE), ]

添加第二种解决方案。

【讨论】:

which(lower.tri(m, diag = TRUE), arr.ind=T) 也会很好用。

以上是关于用对角线索引矩阵中的上三角形或下三角形的主要内容,如果未能解决你的问题,请参考以下文章

R语言使用cor函数计算相关性矩阵进行相关性分析,使用corrgram包可视化相关性矩阵行和列使用主成分分析重新排序下三角形中使用平滑的拟合线和置信椭圆,上三角形中使用散点图对角线最小值和最大值

从上三角形获取矩阵的索引

沿列展平numpy数组,顺序为:下三角形,对角线,上三角形

numpy 矩阵操作

矩阵 - 镜像下三角形到上三角形

R语言使用cor函数计算相关性矩阵进行相关性分析,使用corrgram包可视化相关性矩阵行和列使用主成分分析重新排序下三角形中使用底纹和颜色表示相关性变量按其原始顺序绘制上三角形空白