我正在做一個項目,我正在做很多矩陣計算。Scipy稀疏矩陣特殊減法
我正在尋找一種智能方式來加速我的代碼。在我的項目中,我正在處理大小爲100Mx1M的稀疏矩陣,其中包含大約10M的非零值。下面的例子只是爲了看到我的觀點。
比方說,我有:
- 大小(2)
- 大小的矢量c的矢量V(3)
大小的稀疏矩陣X(2,3)
v = np.asarray([10, 20]) c = np.asarray([ 2, 3, 4]) data = np.array([1, 1, 1, 1]) row = np.array([0, 0, 1, 1]) col = np.array([1, 2, 0, 2]) X = coo_matrix((data,(row,col)), shape=(2,3)) X.todense() # matrix([[0, 1, 1], # [1, 0, 1]])
目前我正在做:
result = np.zeros_like(v)
d = scipy.sparse.lil_matrix((v.shape[0], v.shape[0]))
d.setdiag(v)
tmp = d * X
print tmp.todense()
#matrix([[ 0., 10., 10.],
# [ 20., 0., 20.]])
# At this point tmp is csr sparse matrix
for i in range(tmp.shape[0]):
x_i = tmp.getrow(i)
result += x_i.data * (c[x_i.indices] - x_i.data)
# I only want to do the subtraction on non-zero elements
print result
# array([-430, -380])
而我的問題是for循環,特別是減法。 我想找到一種方法來通過僅減去非零元素來向量化此操作。
東西直接獲得減法稀疏矩陣:
matrix([[ 0., -7., -6.],
[ -18., 0., -16.]])
是否有辦法巧妙地做到這一點?
減法? – denis