C中的稀疏矩阵乘法

问题描述 投票:2回答:2

我有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]

谢谢。

c matrix sparse-matrix matrix-multiplication
2个回答
1
投票

有稀疏包可以为您进行乘法运算。你在SuiteSparse中尝试过Csparse吗? http://faculty.cse.tamu.edu/davis/suitesparse.html

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


0
投票

乘以稀疏矩阵不是一个好主意,因为无论如何,得到的矩阵都是密集的。显然,你的算法包括用矢量对稀疏矩阵进行顺序乘法:矩阵乘以一个矢量,然后另一个矩阵乘以得到的乘积,依此类推。坚持使用这种计算模式是明智的,这样可以节省CPU时间和RAM量(如果你打算获得并存储两个稀疏矩阵的乘积,后者会很大)。

© www.soinside.com 2019 - 2024. All rights reserved.