我知道使用upper.tri()和lower.tri()我可以得到上下三角矩阵除以主对角线。
但是,将三角矩阵除以次级对角线的最快方法是什么?
答案 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