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

Scipy稀疏矩阵–仅非零元素的逐元素乘法和除法

如何解决Scipy稀疏矩阵–仅非零元素的逐元素乘法和除法

我有三个稀疏矩阵ABC,并且我想计算(A*B)/C的按元素结果,即按元素相乘AB,然后逐个除以C

自然地,由于C稀疏,所以除以零会导致大多数矩阵元素设置为无穷/南。但是,我对这些元素不感兴趣,因为出于我的需要,A实际上是一个掩码,并且A中的所有零索引应在结果中保持零。实际上,即使我们决定0/0=0,scipy也会计算这些项目,即使它们可能被掩盖。

避免在A中为零的元素进行冗余计算的最佳方法是什么?

具体示例:

A = sparse.csr_matrix(np.identity(100))
B = sparse.csr_matrix(np.identity(100) * 2)
C = sparse.csr_matrix(np.identity(100) * 5)

Z = ((A*B)/C)

Z[0,0]
>>> 0.4
Z[0,1]
>>> nan

必填结果:

Z[0,1]
>>> 0.0

注意:我对此操作的执行最感兴趣。

解决方法

这是执行此操作的最佳方法,但是如果C.data中包含0,则它们仍会以NaN的形式出现。您选择如何处理此问题可能取决于您到底在做什么。

A = sparse.csr_matrix(np.identity(100))
B = sparse.csr_matrix(np.identity(100) * 2)
C = sparse.csr_matrix(np.identity(100) * 5)

C.data = 1 / C.data

Z = A*B*C

>>> Z
<100x100 sparse matrix of type '<class 'numpy.float64'>'
    with 100 stored elements in Compressed Sparse Row format>

>>> Z[0,0]
0.4
>>> Z[0,1]
0.0

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