Python矩阵乘法:稀疏乘密集

Python matrix multiplication: sparse multiply dense

给定代码片段:

B = A @ M - T

其中A是一个CSRscipy稀疏矩阵MT是两个 numpy 数组.

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

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

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

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'>