gpt4 book ai didi

python - Scipy 稀疏矩阵 - 仅对非零元素进行逐元素乘法和除法

转载 作者:行者123 更新时间:2023-12-03 23:43:58 25 4
gpt4 key购买 nike

我有三个稀疏矩阵 A , B , 和 C ,我想计算以下元素的结果:(A*B)/C ,即逐元素相乘 AB ,然后按元素除以 C .
当然,因为 C是稀疏的,除以零导致大多数矩阵元素设置为无穷大/nan。但是,我对这些元素不感兴趣,因为满足我的需要 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,0]
>>> 0.4
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

关于python - Scipy 稀疏矩阵 - 仅对非零元素进行逐元素乘法和除法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64070990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com