从稀疏矩阵的非零值中减去向量

我想从稀疏矩阵的非零值中减去一个向量,例如


     [,1] [,2] [,3] [,4]

[1,]    0    0    4    0

[2,]    0    5    0    3

[3,]    1    2    0    0

这是我试图减去的向量:


[1 2 3]

所以我最终需要的是:


     [,1] [,2] [,3] [,4]

[1,]    0    0    3    0

[2,]    0    3    0    1

[3,]   -2   -1    0    0

我通过使用来做到这一点,但是当我使用整个数据集时,它会消耗我的内存。sparse_matrix.A


附言:矩阵的尺寸太大,我不想使用循环!


料青山看我应如是
浏览 67回答 1
1回答

一只甜甜圈

让我们从设置问题开始,并使用csr_matrix来构建稀疏矩阵:scipy.sparsefrom scipy.sparse import csr_matrixa = np.array([[0, 0, 4, 0],              [0, 5, 0, 3],              [1, 2, 0, 0]])a_sp = csr_matrix(a, dtype=np.int8)b = np.array([1,2,3])我们可以找到稀疏矩阵的非零位置,csr_matrix.nonzero,并使用坐标对1d稠密数组进行索引。然后通过在稀疏矩阵上索引来减去相应的坐标:rownonzeronz = a_sp.nonzero()a_sp[nz] -= b[nz[0]]print(a_sp.toarray())array([[ 0,  0,  3,  0],       [ 0,  3,  0,  1],       [-2, -1,  0,  0]])
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python