2015-05-29 96 views
0

我期待通过提供矩阵的维数m x n以及我期望拥有的非零元素的数量来预先分配R中的稀疏矩阵(使用simple_triplet_matrix)。 Matlab有函数“spalloc”(见下文),但是我还没有能够在R中找到相同的结果。有什么建议吗? S = spalloc(m,n,nzmax)创建一个大小为m乘n的全零稀疏矩阵S,空间容纳nzmax个非零值。在R中分配最大非零元素的稀疏矩阵

+0

参见包**矩阵**和函数'spMatrix'。 – Pafnucy

回答

1

尽管在R中预先分配一个传统的密集矩阵可能是有意义的(同样,预先分配一个规则(原子)向量而不是一个接一个地增加它的大小效率要高得多,我很确定它将工资预分配稀疏矩阵中R,在大多数情况下。 为什么? 对于密集矩阵,可以分配,然后分配“一块一块的”,例如, m[i,j] <- value 对于稀疏矩阵,但是这是非常不同:如果你做了类似 S [i,j] < - 值 内部代码必须检查[i,j]是否是exis (通常不为零)。如果是这样,它可以更改的值,但其他方式,三角形(i,j, value)需要存储这意味着扩展当前的结构等。如果你一块一块地做,它是低效的......大多数情况下,如果你已经做了一些预分配或者不做分配的话。

如果,另一方面,你已经事先知道所有的[i,j]组合,其中将包含非零,你可以“预分配”,但在这种情况下, 只存储载体i和长度的j例如nnzero。然后使用您的基础“算法”还构建包含所有相应的value的相同长度的向量,即条目。 现在的确如@Pafnucy所建议的那样,使用spMatrix()sparseMatrix()这两个稍微不同的相同功能版本:根据其内容构建一个稀疏矩阵。

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