为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

料青山看我应如是 2022-09-27 09:54:23
我想从稀疏矩阵的非零值中减去一个向量,例如     [,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附言:矩阵的尺寸太大,我不想使用循环!
查看完整描述

1 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

让我们从设置问题开始,并使用csr_matrix来构建稀疏矩阵:scipy.sparse


from scipy.sparse import csr_matrix


a = 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稠密数组进行索引。然后通过在稀疏矩阵上索引来减去相应的坐标:rownonzero


nz = 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]])


查看完整回答
反对 回复 2022-09-27
  • 1 回答
  • 0 关注
  • 66 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信