gpt4 book ai didi

python - Scipy 稀疏矩阵中的行划分

转载 作者:太空宇宙 更新时间:2023-11-03 15:47:18 25 4
gpt4 key购买 nike

我想用数组中给定的标量来划分稀疏矩阵的行。

例如,我有一个csr_matrix C:

C = [[2,4,6], [5,10,15]]
D = [2,5]

我希望 C 除法后的结果是:

result = [[1, 2, 3], [1, 2, 3]]

我已经尝试使用我们用于 numpy 数组的方法:

result = C / D[:,None]

但这看起来真的很慢。如何在稀疏矩阵中有效地做到这一点?

最佳答案

方法 #1

这是一个使用索引手动复制的稀疏矩阵解决方案-

from scipy.sparse import csr_matrix

r,c = C.nonzero()
rD_sp = csr_matrix(((1.0/D)[r], (r,c)), shape=(C.shape))
out = C.multiply(rD_sp)

输出是一个稀疏矩阵,与创建完整矩阵的 C/D[:,None] 的输出相反。因此,所提出的方法可以节省内存。

使用 np.repeat 而不是索引进行复制可能会提高性能 -

val = np.repeat(1.0/D, C.getnnz(axis=1))
rD_sp = csr_matrix((val, (r,c)), shape=(C.shape))

方法 #2

另一种方法可能涉及稀疏矩阵的 data 方法,它为我们提供了一个扁平化 View 来查看 in-place 结果的稀疏矩阵,同时避免使用 非零,像这样-

val = np.repeat(D, C.getnnz(axis=1))
C.data /= val

关于python - Scipy 稀疏矩阵中的行划分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49254111/

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