Python矩阵乘法:稀疏乘法密集

时间:2020-10-16 15:39:52

标签: python numpy scipy sparse-matrix

给出代码段:

B = A @ M - T

其中A是企业社会责任稀疏矩阵MT是两个 numpy数组

问题::在矩阵运算期间,numpy会将A视为密集矩阵,还是将MT视为两个稀疏矩阵?

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

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

1 个答案:

答案 0 :(得分:2)

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