我想寫一個函數來標準化大型稀疏矩陣的行(使它們總和爲1)。標準化Scipy稀疏矩陣的有效方法
from pylab import *
import scipy.sparse as sp
def normalize(W):
z = W.sum(0)
z[z < 1e-6] = 1e-6
return W/z[None,:]
w = (rand(10,10)<0.1)*rand(10,10)
w = sp.csr_matrix(w)
w = normalize(w)
然而,這給出了以下異常:
File "/usr/lib/python2.6/dist-packages/scipy/sparse/base.py", line 325, in __div__
return self.__truediv__(other)
File "/usr/lib/python2.6/dist-packages/scipy/sparse/compressed.py", line 230, in __truediv__
raise NotImplementedError
是否有任何合理的簡單的解決方案?我曾看過this,但我怎麼實際做這個部門還不清楚。
這基本上是一個重複的:http://stackoverflow.c om/questions/12237954/multiplying-elements-in-a-sparse-array-with-rows-in-matrix,因爲不管它是逐行逐行乘法還是除法都不重要。當然,如果有人有更好的答案,很好:) – seberg
偉大 - 謝謝! – sterne
我不同意,這是一個不同的問題。您指出的重複做了元素方式的乘法運算,而這個問題似乎想要將每一行除以不同的值(而不是所有非零元素的值相同)。以下Aaron McDaid的解決方案應該有效地工作(並且不需要任何數據的複製)。 – conradlee