我有一个对称矩阵,我想把它转换成R中的上三角/下三角矩阵.有没有办法做到这一点?
我无法使用upper.tri和lower.tri.使用这些给我一个矩阵,条目为TRUE或FALSE.
Ujj*_*wal 30
要获得上三角矩阵:
mat <- matrix(1:9, 3, 3)
mat[lower.tri(mat)] <- 0
Run Code Online (Sandbox Code Playgroud)
要删除对角线,请使用:
mat[lower.tri(mat,diag=TRUE)] <- 0或者mat[!upper.tri(mat)] <- 0如Karolis的评论中所建议的那样.
虽然以前的答案是完美的,但手册是您的朋友:
矩阵的上下三角部分
描述
返回一个与给定矩阵大小相同的逻辑矩阵,其下三角或上三角中的条目为 TRUE。
用法
Run Code Online (Sandbox Code Playgroud)lower.tri(x, diag = FALSE) upper.tri(x, diag = FALSE)参数
Run Code Online (Sandbox Code Playgroud)x一个矩阵。
Run Code Online (Sandbox Code Playgroud)diag合乎逻辑。是否应该包括对角线?
也可以看看
例子
Run Code Online (Sandbox Code Playgroud)(m2 <- matrix(1:20, 4, 5)) lower.tri(m2) m2[lower.tri(m2)] <- NA m2
小智 5
一个简单的方法:
library(matrixcalc)
lower.triangle(X) #lower triangular
upper.triangle(X) #upper triangular
Run Code Online (Sandbox Code Playgroud)
或者:
library(Matrix)
tril(X) #lower triangular
triu(X) #upper triangular
Run Code Online (Sandbox Code Playgroud)