假设我们有一个大小为A
的矩阵NxN
,而A
是稀疏的,N
非常大。所以我们自然希望存储就像scipy稀疏矩阵一样。
我们还有一个大小为q
的密集numpy数组NxK
,其中K
相对较小。
我们如何最有效地执行q.T * A * q
,其中*
是矩阵乘法,以获得KxK
结果?
我们想要的一部分可以有效地完成,这只是A * q
,但是一旦你这样做,你就会实现一个密集的数组,然后你需要与另一个密集的数组相乘。
任何比q.T.dot(A.dot(q))
更快的方式吗?
答案 0 :(得分:0)
所以你有
(k,N) * (N,N) * (N,k) => (k,k)
其中一个点积导致密集阵列;那个时候另一个密集也很密集。通过这样的乘法,你很快就会失去稀疏性。
如果q
有很多0,并且您希望保留问题的稀疏矩阵性质,请在执行此乘法之前使q
稀疏。