2016-09-16 46 views
0

假設我們有一個大小爲NxN的矩陣A,並且A是稀疏的,並且N非常大。所以我們自然想要存儲的是像scipy稀疏矩陣。Scipy/numpy:兩個密集的,一個稀疏點積

我們也有一個密集的numpy陣列q大小爲NxK,其中K是相對較小。

我們如何最有效地執行q.T * A * q,其中*是矩陣乘法,以獲得KxK的結果?

我們想要的一部分可以高效地完成,這只是A * q,但是一旦你這樣做了,你就需要實現一個密集陣列,然後你需要與另一個密集陣列相乘。

任何方式比q.T.dot(A.dot(q))更快嗎?

回答

0

所以,你必須

(k,N) * (N,N) * (N,k) => (k,k) 

在一個密集排列的點積結果;那個時候另一個密度也很密集。用這樣的乘法,你很快就會失去稀疏性。

如果q有很多0,並且您希望保留該問題的稀疏矩陣性質,請在執行此乘法操作之前先使其稀疏矩陣性質爲q