2013-10-30 208 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

是的,我知道那些屬性。我擔心的是,將列順序稀疏矩陣來回移動會使事情變得非常糟糕...... –