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

标签 python numpy scipy time-complexity sparse-matrix

我有三个稀疏矩阵 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/

相关文章:

python - 对数字列表进行排名

python - 有选择地替换字符串中特定的嵌套定界符(括号),同时尊重嵌套

python - 沿 2D 数组的最后一个轴滑动窗口以使用 NumPy strides 给出 3D 数组

python - 如何获取数组中某个范围内或高于阈值的值的计数?

python - numpy.any() 返回 True 但 "is True"比较失败

python - 从 numpy 数组中选择相邻元素

python - 当没有数据像素时对图像应用滤镜

python - Python 中的时间戳 YYYY-MM-DDThh :mm:ss. sssTZD

python - 以所需格式转换 MCQ - python

python - 我们应该如何使用 pad_sequences 在 keras 中填充文本序列?