我有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]
谢谢。
答案 0 :(得分:1)
有些稀疏的软件包可以为您做乘法。您是否在SuiteSparse中尝试过Csparse? http://faculty.cse.tamu.edu/davis/suitesparse.html
您甚至不需要转换矩阵格式。但是,也有一些方法可以以三元组格式输入。
答案 1 :(得分:0)
乘以稀疏矩阵不是一个好主意,因为生成的矩阵无论如何都是稠密的。显然,您的算法由稀疏矩阵与向量的顺序乘法组成:一个矩阵与一个向量相乘,然后另一个矩阵与所获得的乘积相乘,依此类推。坚持那种计算模式是明智的,这样可以节省CPU时间和RAM数量(如果您打算获取和存储两个稀疏矩阵的乘积,后者将很大)。