r - 如何遍历对角条状矩阵并返回每个位置的索引?

标签 r algorithm matrix traversal

有一个矩阵 N x N,我想以对角线形式遍历这个矩阵并返回索引位置。

如果我有一个 4x4 矩阵,代码应该返回 (1,1); (1,2); (2,1); (1,3); (2,2); (3,1); (1,4); (2,3); (3,2); (4,1);等等

我正在尝试在 R Studio 中执行此操作

最佳答案

1) row(m) + col(m) 沿着反向对角线是恒定的,并且在反向对角线内我们按行排序:

m <- matrix(1:16, 4, 4) # test matrix

m[order(row(m) + col(m), row(m))]
## [1]  1  5  2  9  6  3 13 10  7  4 14 11  8 15 12 16

2) 不像 (1) 那样紧凑,但这里有一个变体,它使用相同的原理,但使用 outer 和回收而不是 row:

k <- nrow(m)
m[ order(outer(1:k, 1:k, "+") + 0:(k-1)/k) ]
## [1]  1  5  2  9  6  3 13 10  7  4 14 11  8 15 12 16

关于r - 如何遍历对角条状矩阵并返回每个位置的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36046441/

相关文章:

r - 从具有间隙的均匀分布中抽取随机样本

r - 格子图在函数内部不起作用

algorithm - 一个图要成为双连通至少需要有多少条边?

c - 将具有重复值的整数数组部分排序到存储桶中的最快方法

algorithm - 最近的对 - 太多点?

java - 在 onActivityResult 中调整 imageView 中的图像大小并重新绘制图像

javascript - 带有值和标签字段的 Shiny selectizeInput

r - 当矩阵的值非常小时,为什么矩阵乘积会变慢?

matlab - 制作子矩阵时遇到问题

matlab - 有什么通用的方法可以从矩阵中删除 NaN 吗?