我有两个稀疏的矩阵mat1
和mat2
(大多数条目为零),我对零值条目不感兴趣:我从图论的角度看矩阵,其中零表示节点之间没有边
如何使用scipy.sparse
矩阵有效地仅获取非零项之间的最小值?
即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])
但对于稀疏矩阵,这将是非常低效的
NB:asimilar question以前被问过,但没有得到任何相关的答案,并且scipy repo上有一个相关的PR,它建议为(arg)min/max而不是为minimum
实现此功能
编辑:若要指定更多,所需的行为将是可交换的,即nonzero-minimum
将获取两个矩阵中仅一个矩阵中存在的所有值以及两个矩阵中存在的项的最小值
以防万一有人也在寻找这个,我当前的实现如下。 不过,如果有任何建议能加快速度或减少内存占用,我将不胜感激
相关问题 更多 >
编程相关推荐