将R中的矩阵转换成上/下三角矩阵除以次对角线
答
只需修改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
+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
+0
这是一个解决方案,但在一个大的矩阵,它会比预期的慢 –
究竟你在(次级)划分的矩阵的意思对角线(这是一个矢量)?请编辑你的问题,并提供一个矩阵的例子和你想要的输出。 –
次对角线==反对角线==从右上角到左下角的对角线 –