我有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]
谢谢。
有稀疏包可以为您进行乘法运算。你在SuiteSparse中尝试过Csparse吗? http://faculty.cse.tamu.edu/davis/suitesparse.html
您甚至不需要转换矩阵格式。但是,有一些方法可以提供三元组格式。
乘以稀疏矩阵不是一个好主意,因为无论如何,得到的矩阵都是密集的。显然,你的算法包括用矢量对稀疏矩阵进行顺序乘法:矩阵乘以一个矢量,然后另一个矩阵乘以得到的乘积,依此类推。坚持使用这种计算模式是明智的,这样可以节省CPU时间和RAM量(如果你打算获得并存储两个稀疏矩阵的乘积,后者会很大)。