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

时间:2021-02-26 19:15:12

标签: sparse-matrix matrix-multiplication

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

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

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

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

提前致谢!

1 个答案:

答案 0 :(得分:1)

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

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

检查第 3.1.3 节 https://epubs.siam.org/doi/pdf/10.1137/0613024