【问题标题】:Multiply Dense Rectangular Matrix by Sparse Matrix稀疏矩阵乘以密集矩形矩阵
【发布时间】:2014-03-06 10:37:05
【问题描述】:

我正在使用 Python、Numpy 和 Scipy 包进行矩阵计算。我正在尝试执行计算X.transpose() * W * X,其中 X 是 2x3 密集矩阵,W 是稀疏对角矩阵。 (下面是非常简化的例子)

import numpy
import scipy.sparse as sp

X = numpy.array([[1, 1, 1],[2, 2, 2]])

W = sp.spdiags([1, 2], [0], 2, 2).tocsr()

我需要找到密集矩阵 X.transpose 和稀疏矩阵 W 的乘积。

我在 scipy 中知道的一种方法不接受右侧的稀疏矩阵。

>>> sp.csr_matrix.dot(X.transpose(), W)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unbound method dot() must be called with csr_matrix instance as first argument (got ndarray instance instead)

有没有办法将稀疏矩阵和密集矩阵相乘,其中稀疏矩阵是 scipy 中右侧的术语?如果不是,那么在不将我的 W 变成密集矩阵的情况下,最好的方法是什么?

【问题讨论】:

    标签: python numpy matrix scipy sparse-matrix


    【解决方案1】:

    矩阵乘法是关联的,因此您可以始终首先计算@ 987654321:

    >>> X.T.dot(W.dot(X))
    array([[9, 9, 9],
           [9, 9, 9],
           [9, 9, 9]])
    

    如果你真的必须计算X.T * W,第一个密集,第二次稀疏,你可以让稀疏矩阵__mul__方法为您提供:

    >>> X.T * W
    array([[1, 4],
           [1, 4],
           [1, 4]])
    

    实际上,对于您的用例,如果在使用np.matrix而不是np.array,则您的特定操作会令人惊讶地整洁到代码:

    >>> Y = np.matrix(X)
    >>> Y.T * W * Y
    matrix([[9, 9, 9],
            [9, 9, 9],
            [9, 9, 9]])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-31
      • 2016-06-25
      • 2017-07-20
      • 2021-04-24
      • 1970-01-01
      • 2020-12-05
      相关资源
      最近更新 更多