我想從稀疏矩陣的非零值中減去一個向量,例如 [,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]])
添加回答
舉報
0/150
提交
取消