我有一个对称矩阵,想要在R中将其转换为上三角/下三角矩阵。 有没有方法可以做到这一点?
我尝试使用upper.tri
和lower.tri
命令,但无法实现目标。 这些命令只会给出一个由TRUE
或FALSE
组成的矩阵。
获取上三角矩阵:
mat <- matrix(1:9, 3, 3)
mat[lower.tri(mat)] <- 0
要删除对角线,请使用:
mat[lower.tri(mat,diag=TRUE)] <- 0
或者 mat[!upper.tri(mat)] <- 0
,如Karolis在评论中建议的那样。
尽管之前的回答很完美,但手册才是你的好朋友:
Lower and Upper Triangular Part of a Matrix
Description
Returns a matrix of logicals the same size of a given matrix with entries TRUE in the lower or upper triangle.
Usage
lower.tri(x, diag = FALSE) upper.tri(x, diag = FALSE)
Arguments
x
a matrix.
diag
logical. Should the diagonal be included?
See Also
Examples
(m2 <- matrix(1:20, 4, 5)) lower.tri(m2) m2[lower.tri(m2)] <- NA m2
library(matrixcalc)
lower.triangle(X) #lower triangular
upper.triangle(X) #upper triangular
或者:
library(Matrix)
tril(X) #lower triangular
triu(X) #upper triangular
?upper.tri
或?lower.tri
中的示例。它与您的问题(以及下面@ujjwal的答案)非常相似。 - shekeine