微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决Python矩阵乘法:稀疏乘法密集

给出代码段:

B = A @ M - T

其中A是企业社会责任稀疏矩阵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,format='csr')
>>> type(A@B - N)
<class 'numpy.matrix'>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。