2015-08-13 45 views
-1

我知道使用upper.tri()和lower.tri()我可以得到上下三角矩阵除以主对角线。将R中的矩阵转换成上/下三角矩阵除以次对角线

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

+0

究竟你在(次级)划分的矩阵的意思对角线(这是一个矢量)?请编辑你的问题,并提供一个矩阵的例子和你想要的输出。 –

+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 
+0

谢谢,这是我正在寻找:) –

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

这是一个解决方案,但在一个大的矩阵,它会比预期的慢 –