2013-10-30 149 views
3

据我了解,numpy.sparse.csr_sparse.dot(other)并从右边乘other我的稀疏矩阵通勤numpy的稀疏矩阵积

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

+0

此外,请注意[此危险](http://stackoverflow.com/a/14204859/1730674)。 – askewchan

回答

1

矩阵乘法性质的小复习:

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

是的,我知道那些属性。我担心的是,将列顺序稀疏矩阵来回移动会使事情变得非常糟糕...... –