将R中的矩阵转换为由次级对角线划分的上/下三角矩阵

时间:2015-08-13 17:28:03

标签: r matrix diagonal

我知道使用upper.tri()和lower.tri()我可以得到上下三角矩阵除以主对角线。

但是,将三角矩阵除以次级对角线的最快方法是什么?

2 个答案:

答案 0 :(得分:1)

只需修改lower.tri的代码,例如

lower.anti.tri<-function(m) col(m)+row(m) > dim(m)[1]+1

m<-matrix(1:16,4)
lower.anti.tri(m)
      [,1]  [,2]  [,3]  [,4]
[1,] FALSE FALSE FALSE FALSE
[2,] FALSE FALSE FALSE  TRUE
[3,] FALSE FALSE  TRUE  TRUE
[4,] FALSE  TRUE  TRUE  TRUE
m[lower.anti.tri(m)]<-NA
m
     [,1] [,2] [,3] [,4]
[1,]    1    5    9   13
[2,]    2    6   10   NA
[3,]    3    7   NA   NA
[4,]    4   NA   NA   NA

答案 1 :(得分:0)

您可以使用apply(mat, 1, rev)水平翻转矩阵,以便翻转lower.tri()

m <- matrix(1:16,4)
m[apply(lower.tri(m), 1, rev)] <- 0

m
#     [,1] [,2] [,3] [,4]
#[1,]    1    5    9   13
#[2,]    2    6   10    0
#[3,]    3    7    0    0
#[4,]    4    0    0    0