2013-03-29 23 views
6

scipy.sparseで作成された疎の988x1ベクトル(csr_matrixの列)があります。スパース行列を高密度行列に変換することなく、平均と標準偏差を得る方法はありますか?csr_matrixの列の平均と標準偏差はどうやって得られますか?

numpy.meanは、高密度のベクトルに対してのみ機能するようです。

+0

[合計エントリ]:そうのような分散を計算すると

col = A.getcol(colindex) 

:まず第一に、あなたはこのようなあなたのスパース列を取得すると仮定/scipy/reference/generated/scipy.sparse.csr_matrix.sum.html#scipy.sparse.csr_matrix.sum)、m * nで除算して平均を計算します。それがマトリックスの意味であると仮定します。私は前に行列平均を辿ったことはありません。 –

+0

こんにちはデビッド、私は私の質問を編集する必要があります、私はベクトルの平均とstdを探していますが、その疎な形で、あなたはそれらの2つの値を取得するscipyのコマンドがありますか? – Curious

+0

コメントの正確な定義は正確ですか?これは988の値の合計を988で割ったものですか?なぜ列を使って作業しているのですか? –

答えて

7

カラムスライスを実行しているので、CSRではなくCSCを使用してマトリックスを保存するほうがよい場合があります。しかしそれはあなたがマトリックスで何をやっているかによって変わります。

CSC行列の列の平均を計算するには、行列のmean()関数を使用できます。

標準偏差を効率的に計算するには、もう少し手間をかけることになります。 http://docs.scipy.org/doc(

N = col.shape[0] 
sqr = col.copy() # take a copy of the col 
sqr.data **= 2 # square the data, i.e. just the non-zero data 
variance = sqr.sum()/N - col.mean()**2 
+5

+1。別のアプローチ(自分のプロジェクトに恥知らずなプラグイン)は、[scikit-learn]の['StandardScaler'(http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html)を使うことです。 CSRおよびCSC行列の平均+分散の最適化計算が最適化されています。 –

+1

@larsmans私は ''疎行列を中心に置くことはできません: 'with_mean = False' "'とcsr_matrixを渡します。 – jul

関連する問題