如何使用这种存储稀疏矩阵的方式进行矩阵运算

计算科学 稀疏矩阵 矩阵
2021-12-09 11:40:34

我为一些泊松问题阅读了存储五点或七点拉普拉斯矩阵的方法,但我不明白如何将这个存储的稀疏矩阵乘以向量或另一个矩阵?

方法说我们只存储对角线条目,它们是 adiag 矩阵中未知的 i,j,k 的系数,并且 i+,j,k 邻居的系数将存储在另一个数组 ax 中,对于 j 个邻居也是如此.

1个回答

这样想:在你的矩阵中,你确切地知道哪些条目是非零的(并且你存储了这些值是什么),而其他一切都是零。如果你只是写下通常的矩阵向量积,

for (i=1...N)
  for (j=1...N)
    output[i] += matrix[i,j] * input[j];

然后您会意识到大多数这些加法只是添加零,因为矩阵条目为零。如果您记住非零条目的位置,则可以避免所有这些不必要的操作,然后只执行那些必要的产品和添加。这本质上就是这本书所建议的:有一种方法可以知道矩阵的非零项在哪里,存储它们的值,然后将上面的循环缩小到只需要那些必要的操作。