Python矩阵乘法:稀疏乘密集
Python matrix multiplication: sparse multiply dense
给定代码片段:
B = A @ M - T
其中A
是一个CSRscipy稀疏矩阵,M
和T
是两个 numpy 数组.
问题:在矩阵运算中,numpy是把A
当成稠密矩阵,还是把M
和T
当成两个稀疏矩阵矩阵?
我怀疑后一种情况是正确的,因为生成的矩阵 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'>
给定代码片段:
B = A @ M - T
其中A
是一个CSRscipy稀疏矩阵,M
和T
是两个 numpy 数组.
问题:在矩阵运算中,numpy是把A
当成稠密矩阵,还是把M
和T
当成两个稀疏矩阵矩阵?
我怀疑后一种情况是正确的,因为生成的矩阵 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'>