C中的稀疏矩阵乘法

时间:2018-10-26 04:30:57

标签: c matrix sparse-matrix matrix-multiplication

我有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-the-multiplication-of-two-sparse-matrices

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]

谢谢。

2 个答案:

答案 0 :(得分:1)

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

您甚至不需要转换矩阵格式。但是,也有一些方法可以以三元组格式输入。

答案 1 :(得分:0)

乘以稀疏矩阵不是一个好主意,因为生成的矩阵无论如何都是稠密的。显然,您的算法由稀疏矩阵与向量的顺序乘法组成:一个矩阵与一个向量相乘,然后另一个矩阵与所获得的乘积相乘,依此类推。坚持那种计算模式是明智的,这样可以节省CPU时间和RAM数量(如果您打算获取和存储两个稀疏矩阵的乘积,后者将很大)。