高效的带矩阵存储

时间:2013-07-17 13:19:42

标签: r dataset matrix sparse-matrix package

是否有R包看到稀疏矩阵(即许多零条目),例如4乘4矩阵:

Q <- matrix(c(1,-1,0,0, -1,2,-1,0,  0,-1,2,-1, 0,0,-1,1), nrow=4); print(Q)

并将其存储(并操作)为4乘2矩阵:

Q.band <- matrix(c(1,2,2,1, -1,-1,-1,0), nrow=4); print(Q.band)

由于不需要零条目,并且由于对称性,我们不需要将非零非对角线条目存储两次。

我调查了R套餐矩阵和垃圾邮件。它们很有用但并没有完全如上所述。

1 个答案:

答案 0 :(得分:1)

您可以使用dsCMatrix包中的Matrix

  

dsCMatrix类是一类对称的稀疏数值矩阵   采用压缩的,面向列的格式。

所以在你的情况下:

library(Matrix)
as(Q, "dsCMatrix")

这将只存储7个元素

 length(as(Q, "dsCMatrix")@x)
 [1] 7

要获取矩阵Q.band,您可以执行以下操作。

matrix(c(as(Q, "dsCMatrix")@x,0),ncol=2,byrow=TRUE)
    [,1] [,2]
[1,]    1   -1
[2,]    2   -1
[3,]    2   -1
[4,]    1    0