Scipy / numpy:两个密集的,一个稀疏点产品

时间:2016-09-16 20:28:06

标签: python arrays numpy matrix scipy

假设我们有一个大小为A的矩阵NxN,而A是稀疏的,N非常大。所以我们自然希望存储就像scipy稀疏矩阵一样。

我们还有一个大小为q的密集numpy数组NxK,其中K相对较小。

我们如何最有效地执行q.T * A * q,其中*是矩阵乘法,以获得KxK结果?

我们想要的一部分可以有效地完成,这只是A * q,但是一旦你这样做,你就会实现一个密集的数组,然后你需要与另一个密集的数组相乘。

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

1 个答案:

答案 0 :(得分:0)

所以你有

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

其中一个点积导致密集阵列;那个时候另一个密集也很密集。通过这样的乘法,你很快就会失去稀疏性。

如果q有很多0,并且您希望保留问题的稀疏矩阵性质,请在执行此乘法之前使q稀疏。