假设我有一个方阵:
x<-matrix(sample(36),ncol=6)
在MATLAB
中,diag
函数有一个方便的参数k
,用于获取&#34;非中心&#34; x
的对角线。在R
?
其次,如何做同样的事情来获得&#34; up-right&#34;而不是标准&#34;左下&#34;对角线?
答案 0 :(得分:3)
mat = matrix(c(1:25), nrow = 5, ncol = 5, byrow = TRUE)
mat
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 6 7 8 9 10
[3,] 11 12 13 14 15
[4,] 16 17 18 19 20
[5,] 21 22 23 24 25
# Diagonal
mat[row(mat) == col(mat)]
[1] 1 7 13 19 25
# "Lower" diagonals
mat[row(mat) == col(mat)+1]
[1] 6 12 18 24
> mat[row(mat) == col(mat)+2]
[1] 11 17 23
# "Upper" diagonals
mat[row(mat) == col(mat)-1]
[1] 2 8 14 20
mat[row(mat) == col(mat)-2]
[1] 3 9 15
...但是@BenBolker的答案(当然)更优雅。
看起来Ben删除了他的答案,所以我在这里稍作修改。假设k
是主对角线上方的位数,则:
mat[col(mat) - row(mat) == k]
如果k
为正数,将为您提供主对角线上方的k
对角线,如果k
为负数,则会在下方为{
}。
Per @ MichaelChirico的评论,以获得&#34;正确的&#34;对角线:
mat[row(mat) + col(mat) == m]
其中2 <= m <= 2 * nrow(mat)。