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