gpt4 book ai didi

python - 如何使用 scipy.sparse.csr_matrix.minimum 忽略隐式零?

转载 作者:行者123 更新时间:2023-12-05 06:50:58 27 4
gpt4 key购买 nike

我有两个矩阵 mat1mat2 是稀疏的(大多数条目为零),我对零值条目不感兴趣:我看从图论的角度来看矩阵,其中零表示节点之间没有边。

如何使用 scipy.sparse 矩阵高效仅在非零项之间获取最小值?IE。相当于 mat1.minimum(mat2) 会忽略隐式零。

使用稠密矩阵,这很容易做到:

import numpy as np
nnz = np.where(np.multiply(mat1, mat2))
m = mat1 + mat2
m[nnz] = np.minimum(mat1[nnz], mat2[nnz])

但这对于稀疏矩阵来说效率很低。

注意: similar question之前有人问过,但没有得到任何相关答案,有一个相关的PR在 scipy repo 上建议为 (arg)min/max 但不是 minimum 实现这个。

编辑:要指定更多,所需的行为将是可交换的,即此 nonzero-minimum 将仅采用两个矩阵之一中存在的所有值以及存在的条目的最小值在两个矩阵中

最佳答案

以防万一有人也在寻找这个,我当前的实现如下。但是,如果有任何可以加快速度或减少内存占用的建议,我将不胜感激。

s = mat1.multiply(mat2)
s.data[:] = 1.

a1 = mat1.copy()
a1.data[:] = 1.
a1 = (a1 - s).maximum(0)

a2 = mat2.copy()
a2.data[:] = 1.
a2 = (a2 - s).maximum(0)

res = mat1.multiply(a1) + mat2.multiply(a2) + \
mat1.multiply(s).minimum(mat2.multiply(s))

关于python - 如何使用 scipy.sparse.csr_matrix.minimum 忽略隐式零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66277644/

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