【问题标题】:Preallocate sparse matrix with max nonzeros in R在 R 中预分配具有最大非零值的稀疏矩阵
【发布时间】:2015-05-29 17:52:21
【问题描述】:

我希望通过提供矩阵的维度 m x n 以及我期望拥有的非零元素的数量来在 R 中预分配一个稀疏矩阵(使用 simple_triplet_matrix)。 Matlab 具有函数“spalloc”(见下文),但我无法在 R 中找到等效函数。有什么建议吗?

S = spalloc(m,n,nzmax) 创建一个大小为 m×n 的全零稀疏矩阵 S,并留有空间容纳 nzmax 非零值。

【问题讨论】:

  • 查看包Matrix和函数spMatrix

标签: r sparse-matrix


【解决方案1】:

虽然在 R 中预分配一个传统的密集矩阵可能是有意义的(与预分配一个常规(原子)向量而不是一个一个地增加其大小一样,它更有效, 我很确定在大多数情况下,在 R 中预分配稀疏矩阵不会付费。 为什么? 对于密集矩阵,您分配然后分配“一块一块”,例如 m[i,j] <- value 然而,对于稀疏矩阵,这是非常不同的:如果你做类似的事情 S[i,j] 更改该值,否则,无论如何,需要存储三元组(i,j, value) 并且这意味着扩展当前结构等. 如果你一块一块地做这件事,它是低效的……主要是不管你是否做了一些预分配。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多