【问题标题】:Multiply columns of CSR sparse matrix乘以 CSR 稀疏矩阵的列
【发布时间】:2021-08-21 15:31:42
【问题描述】:

我有以下稀疏的 CSR 矩阵

from scipy.sparse import csr_matrix

row = np.array([0, 0, 1, 2, 2, 2])
col = np.array([0, 2, 2, 0, 1, 2])
data = np.array([1, 2, 3, 4, 5, 6])
matrix = csr_matrix((data, (row, col)), shape=(3, 3))

还有这个数组

weights = np.asarray([3, 6, 9])

我想做以下事情

matrix.toarray() * weights

没有将稀疏矩阵转换为密集数组。

我试过了

matrix * weights

但这只是一个点积,而不是我想要的列乘法。

知道如何在不将整个 CSR 矩阵转换为密集数组的情况下实现这一点吗?

【问题讨论】:

    标签: python arrays numpy scipy sparse-matrix


    【解决方案1】:

    对于这个矩阵:

    >>> matrix.A
    array([[1, 0, 2],
           [0, 0, 3],
           [4, 5, 6]])
    

    标准乘法默认为点积(matrix @ weights 也是如此):

    >>> matrix * weights
    array([21, 27, 96])
    

    虽然有一个逐点乘法函数。这使列相乘:

    >>> matrix.multiply(weights).A
    array([[ 3,  0, 18],
           [ 0,  0, 27],
           [12, 30, 54]])
    

    您也可以使用它通过广播来增加行数:

    >>> matrix.multiply(weights[:, np.newaxis]).A
    array([[ 3,  0,  6],
           [ 0,  0, 18],
           [36, 45, 54]])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-03
      • 2015-12-05
      • 1970-01-01
      • 1970-01-01
      • 2019-08-09
      • 2023-03-03
      • 2014-03-06
      • 2019-09-30
      相关资源
      最近更新 更多