1

是否有一个 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 包 Matrix 和垃圾邮件。它们很有用,但并没有完全按照上面所说的那样做。

4

1 回答 1

1

您可以dsCMatrixMatrix包中使用:

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
于 2013-07-17T13:34:58.387 回答