我有三个稀疏矩阵 A
, B
, 和 C
,我想计算以下元素的结果:(A*B)/C
,即逐元素相乘 A
与 B
,然后按元素除以 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/