大型稀疏矩阵,以三角矩阵R(Large Sparse Matrix to Triangular Ma

2019-10-17 05:32发布

我有一个非常大的(约91万次无零项)稀疏矩阵()中的R,看起来像:

> myMatrix 
  a b c  
a . 1 2
b 1 . .
c 2 . .

我想将它转化成一个三角矩阵(上限或下限),但是当我尝试myMatrix的= myMatrix的* lower.tri(myMatrix的)有一个错误是,“问题是过大”的lower.tri()。 想知道是否有人会知道解决办法的。 谢谢你的帮助!

Answer 1:

相反,对基体本身的工作,努力在其summary

library(Matrix)
myMatrix <- sparseMatrix(
    i = c(1,1,2,3),
    j = c(2,3,1,1),
    x = c(1,2,1,2))

myMatrix
# 3 x 3 sparse Matrix of class "dgCMatrix"
#           
# [1,] . 1 2
# [2,] 1 . .
# [3,] 2 . .

mat.summ   <- summary(myMatrix)
lower.summ <- subset(mat.summ, i >= j)

sparseMatrix(i = lower.summ$i,
             j = lower.summ$j,
             x = lower.summ$x,
             dims = dim(myMatrix))
# 3 x 3 sparse Matrix of class "dgCMatrix"
#           
# [1,] . . .
# [2,] 1 . .
# [3,] 2 . .


Answer 2:

这是一个快一点,当你有一个大的稀疏矩阵:

ind <- which(myMatrix@i > myMatrix@j)
myMatrix_lower <- sparseMatrix(i = myMatrix@i[ind], 
                               j = myMatrix@j[ind],
                               x = myMatrix@x[ind] ,
                               dims = dim(myMatrix),
                               giveCsparse = F, index1 = FALSE)


文章来源: Large Sparse Matrix to Triangular Matrix R