计算稀疏矩阵的点积。

3
据我理解,numpy.sparse.csr_sparse.dot(other)将从右侧对稀疏矩阵进行乘法运算,其中other是另一个矩阵。
A = numpy.sparse.csr_sparse(something)
B = numpy.matrix(something)
C = A.dot(B)                     # C = A*B

我该如何对这两个矩阵进行运算,得到 B*A 的结果,同时又不失去将矩阵保存为稀疏矩阵的优势(例如 .todense() 等)?

1
你不能把 B 也保存为稀疏矩阵吗?尝试使用 sparse.csr_matrix.dot(B, A) 会提示第一个参数必须是稀疏矩阵,但如果可能的话,使用 sparse.csr_matrix.dot(sparse.csr_matrix(B), A) 就可以了。 - askewchan
此外,请注意这个危险 - askewchan
1个回答

2

矩阵乘法的一些基本特性:

D = B * A
D.T = A.T * B.T
D = (A.T * B.T).T

这也就导致了一个显而易见的问题:

D = A.T.dot(B.T).T

请注意,CSR和CSC矩阵的转置非常快速,因为它只是改变了形状和类型(从CSR到CSC或从CSC到CSR),而内部数据保持不变。

2
是的,我知道那些属性。我的担心是,来回转置列序稀疏矩阵会使事情变得非常混乱... - Nils Werner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接