如何解决Python矩阵乘法:稀疏乘法密集
给出代码段:
B = A @ M - T
其中A
是企业社会责任稀疏矩阵,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,format='csr')
>>> type(A@B - N)
<class 'numpy.matrix'>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。