私はcsr_matrix形式の疎行列を持っています。各行について、私は非ゼロ要素から行平均を引く必要があります。この手段は、行の長さではなく、行の非ゼロ要素の数で計算する必要があります。scipy.sparse行列:0以外の要素への行平均の減算
# M is a csr_matrix
sums = np.squeeze(np.asarray(M.sum(1))) # sum of the nonzero elements, for each row
counts = np.diff(M.tocsr().indptr) # count of the nonzero elements, for each row
# for the i-th row the mean is just sums[i]/float(counts[i])
問題はアップデートの一部です: 私は、行を計算するための高速な方法は、次のコードを意味しました。私はこれを行うには速い方法が必要です。 は実際に私がやっている何lil_matrixにMを変換し、この方法でアップデートを実行することです:
M = M.tolil()
for i in xrange(len(sums)):
for j in M.getrow(i).nonzero()[1]:
M[i, j] -= sums[i]/float(counts[i])
遅くなります。より高速なソリューションの提案はありますか?
'' np.repeat'と 'counts'を使って行を複製しようとしています。そして、' M.data'配列から直接その行を複製しようとします。 – hpaulj