2009-06-07 18 views
22

私は、このフォームではPythonで配列の平均値を計算したいと思います:Pythonでnumpyを 'None'の値で使用する方法は?

Matrice = [1, 2, None] 

私はちょうど私のNone値はnumpy.mean計算で無視されますが、私はどのように把握することはできませんしたいのですがそれをやる。

+2

1:この質問は、値が時々NULL可能データベースからインポートされた配列のために特に関連することができます。 – EOL

答えて

10

を無視し、結果を平均化することができますmasked arrays。ここに例があります。

import MA 
a = MA.array([1, 2, None], mask = [0, 0, 1]) 
print "average =", MA.average(a) 

残念ながら、マスクされた配列は徹底的にnumpyのではサポートされていないので、あなたは、それらと行うことができないことができるものを見るために見て回るようになってきました。

+2

a member機能が充実していったのです。マスクされた配列を通常の配列に戻し、無効と認識される値(NaN、-9999、ユーザーが必要とするもの)を入力します。 – mariotomo

+0

マスクされた配列のパフォーマンスは、実装が純粋なPythonであるため、通常のnumpy配列よりも大幅に少なくなります。大きなデータを扱う場合は、パフォーマンスの影響に注意してください。 – timbo

3

はnumpyのを使用していないが、標準のpythonであなたはリスト内包 やフィルタ機能

>>> [i for i in [1, 2, None] if i != None] 
[1, 2] 
>>> filter(lambda x: x != None, [1, 2, None]) 
[1, 2] 

を使用してNoneをフィルタリングして、あなたが探しているNone

+4

'x!= None'は通常' x is None'と書かれています(PEP 8: "Noneのようなシングルトンとの比較は常に 'is'や 'not'で行われるべきで、等価演算子ではありません。) – EOL

3

また、NaNやInfなどの値を使用してクラッジすることもできます。

In [1]: array([1, 2, None]) 
Out[1]: array([1, 2, None], dtype=object) 

In [2]: array([1, 2, NaN]) 
Out[2]: array([ 1., 2., NaN]) 

実際、それはクルージングではないかもしれません。 Wikipedia says

NaNを使用して計算に欠損値を表すことができます。

実際には、これはmean()関数では機能しませんので、気にしないでください。 :)あなたはまた、0また、フィルタを使用し、それにNoneを渡していない、それが非真のオブジェクトをフィルタしますすることができます

In [20]: mean([1, 2, NaN]) 
Out[20]: nan 
+6

実際、すべてのNaN以外の値を明示的に選択する 'mean(a [〜isnan(a)])'が機能します。 – u0b34a0f6ae

+1

@kaizerコメントは宝石です。素晴らしいソリューション、ありがとう! – Agos

1

:D だから、あなたも0を必要といけないときにそれを使用しています。

>>> filter(None,[1, 2, None]) 
[1, 2] 
6

あなたはそのためにscipyのダウンロードを使用することができます。

import scipy.stats.stats as st 
m=st.nanmean(vec) 
+0

ありがとう、これは私が必要としたものです! – max

+1

これは機能しません。 'a = [1,2、None]'そして 'st.nanmean(a)'はTypeErrorになります。 – Nate

+1

はい、そうです、それはnumpy.nanで動作し、Noneでは動作しません。 numpyベクトルの平均を計算するときに最も便利です。 –

関連する問題