【问题标题】:Python matrix multiplication: sparse multiply densePython矩阵乘法:稀疏乘密集
【发布时间】:2021-01-31 03:50:36
【问题描述】:

给定代码sn-p:

B = A @ M - T

A 是 CSR scipy 稀疏矩阵MT 是两个 numpy 数组

问题:在矩阵运算过程中,numpy是把A当成一个稠密矩阵,还是把MT当成两个稀疏矩阵?

我怀疑后一种情况是正确的,因为结果矩阵 B 不是稀疏格式。

我还注意到,如果我将 A 的格式更改为密集,则此操作会慢得多,这与我的猜测相矛盾。

【问题讨论】:

  • 这里A稀疏矩阵控制操作。如果另一个对象是稀疏的,它会做一件事,如果密集(具有不同的结果类型)则做另一件事
  • @* 类似,将任务传递给sparse.__mul__,后者又根据other 的内容调用几种方法之一。如果您想了解更多详细信息,请点击此页面上的 [source] 链接:docs.scipy.org/doc/scipy/reference/generated/…

标签: python numpy scipy sparse-matrix


【解决方案1】:

Numpy 不做稀疏矩阵。 Scipy 进行矩阵乘法(这意味着没有多线程,不像 numpy)。

A 保持稀疏,但如果 M 是密集数组,则 A @M 填充密集数组。

>>> import numpy as np
>>> from scipy import sparse
>>> A = sparse.random(100, 10, density=0.1, format='csr')
>>> B = np.random.rand(10, 10)
>>> type(A@B)
<class 'numpy.ndarray'>
>>> type(B@A.T)
<class 'numpy.ndarray'>

请注意,一些稀疏运算仍然给出矩阵,而不是数组:

>>> N = sparse.random(100, 10, density=0.1, format='csr')
>>> type(A@B - N)
<class 'numpy.matrix'>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 2021-04-24
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多