【问题标题】:Scipy/numpy: two dense, one sparse dot productScipy/numpy:两个密集,一个稀疏的点积
【发布时间】:2016-09-16 20:28:06
【问题描述】:

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

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

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

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

有什么比q.T.dot(A.dot(q))更快的方法吗?

【问题讨论】:

    标签: python arrays numpy matrix scipy


    【解决方案1】:

    所以你有

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-05-26
      • 2017-05-17
      • 2012-08-20
      • 2013-01-29
      • 2016-02-22
      • 1970-01-01
      • 2015-09-11
      • 2012-12-20
      • 2021-07-21
      相关资源
      最近更新 更多