首页 > 解决方案 > C中的稀疏矩阵乘法

问题描述

我有 2 个矩阵市场格式的稀疏矩阵文件:

row col val
1   1   3.0
1   2   1.0
2   3   2.0
etc...

目前,我已将文件拆分为 6 个数组:

row_A[], col_A[], val_A[], row_B[] …

其中分别包含行索引、列索引和值。

我想轻松地将这两个矩阵相乘,而不必先将它们转换为密集矩阵格式。有这样做的算法吗?

我在 Quora 上找到了这个伪代码,但我不确定它是否是最好的实现,或者它将如何在 C 中实现:https ://www.quora.com/What-is-the-C-program-for-两个稀疏矩阵的乘法

multiply(A,B):
  for r in A.rows:
    for c in A.rows[r]:
      for k in B.rows[c]:
        C[r,k] += A[r,c]*B[c,k]

谢谢。

标签: cmatrixsparse-matrixmatrix-multiplication

解决方案


有一些稀疏的包可以为你做乘法。您是否在 SuiteSparse 中尝试过 Csparse? http://faculty.cse.tamu.edu/davis/suitesparse.html

您甚至不需要转换矩阵格式。然而,也有办法以三联格式喂食。


推荐阅读