在R

时间:2015-05-29 17:52:22

标签: r sparse-matrix

我希望通过提供矩阵的维数m x n以及我期望拥有的非零元素的数量,在R中预先分配稀疏矩阵(使用simple_triplet_matrix)。 Matlab具有" spalloc" (见下文),但我还没有找到R中的等价物。有什么建议吗?

S = spalloc(m,n,nzmax)创建一个大小为m-by-n的全零稀疏矩阵S,其空间可容纳nzmax非零。

1 个答案:

答案 0 :(得分:1)

尽管在R中预先分配传统的密集矩阵可能是有意义的(同样地,预分配常规(原子)向量而不是逐个增加其大小的效率要高得多, 我很确定在大多数情况下, 支付费用来预先分配R中的稀疏矩阵。 为什么? 对于密集矩阵,您可以分配然后分配“逐个”,例如, m[i,j] <- value 对于稀疏矩阵,然而这是非常不同的:如果你做了类似的事情    S [i,j]&lt; - 值 内部代码必须检查[i,j]是否是现有条目(通常为非零)。如果是,它可以更改值,但除此之外,无论如何,三元组(i,j, value)需要存储,这意味着扩展当前结构等。如果你一块一块地做这件事,效率很低......大多数情况下你都做了一些预先分配。

另一方面,如果您事先已经知道所有包含非零的[i,j]组合,则可以“预先分配”,但在这种情况下, 只需存储长度为i的向量jnnzero。然后使用你的底层“算法”来构造一个相同长度的向量x,它包含所有相应的value s,即条目。 现在,正如@Pafnucy建议的那样,使用spMatrix()sparseMatrix(),相同功能的两个略有不同的版本:构造稀疏矩阵,给定其内容。

我很乐意进一步提供帮助,因为我是Matrix包的维护者。