【问题标题】:Sparse matrix multplication in CC中的稀疏矩阵乘法
【发布时间】:2018-10-26 04:30:56
【问题描述】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-20
        • 2017-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-09
        相关资源
        最近更新 更多