稀疏矩阵、稀疏累加器和乘法

Sparse matrices, sparse accumulator and multiplication

我正在尝试实现本文中两个稀疏矩阵相乘的算法:https://crd.lbl.gov/assets/pubs_presos/spgemmicpp08.pdf(第一个算法 - 一维算法)。

困扰我的是我不确定 SPA(稀疏累加器)到底是什么。我做了一些研究,我得出的结论是 SPA 代表一个 row/column 的稀疏矩阵(我对那部分不太确定)并且它由一个具有非零值的密集向量组成,a非零元素的索引列表(为什么要列出?)和一个由“已占用”标志组成的布尔密集向量(如果该位置上的活动 row/column 中的元素不为零,则为 on -th 索引)。有些还保留非零输入的数量。

我说的对吗?如果是这样,我有一些问题。如果这个结构有一个密集的布尔向量并且我们必须保留值,那么简单地填充一个密集向量并忽略它是稀疏的不是更容易吗?我敢肯定这是有效率的原因(内存和时间),但我不明白为什么。

此外,正如我已经问过的,为什么除了索引列表之外的所有内容都是矢量?为什么它不是向量?

提前致谢!

许多稀疏矩阵算法使用密集工作向量来允许随机访问矩阵的当前“活动”列或行。

稀疏的 MATLAB 实现通过定义一个 称为稀疏累加器或 SPA 的抽象数据类型。 SPA 由实数(或复数)值的密集向量、true/false“占用”标志的密集向量以及占用标志为真的索引的无序列表组成。 SPA 表示一个列向量,其“未占用”位置为零且 其“占用”位置的值(零或非零)由稠密实数或复数向量指定。它允许在恒定时间内随机访问单个元素,以及在恒定时间内对每个元素的占用位置进行排序。

查看 https://epubs.siam.org/doi/pdf/10.1137/0613024

中的第 3.1.3 节