次の形式で Python の配列の平均を計算したいと思います。
Matrice = [1, 2, None]
None
計算で値を無視したいのですが、そのnumpy.mean
方法がわかりません。
マスクされた配列を探しています。これが例です。
import numpy.ma as ma
a = ma.array([1, 2, None], mask = [0, 0, 1])
print "average =", ma.average(a)
上記のリンク先のnumpyのドキュメントから、「numpy.maモジュールは、マスク付きのデータ配列をサポートするnumpyのほぼ同等の代替品を提供します。」
そのためにscipyを使用できます:
import scipy.stats.stats as st
m=st.nanmean(vec)
numpy は使用していませんが、標準の python では、None
リスト内包表記またはフィルター関数を使用して除外できます
>>> [i for i in [1, 2, None] if i != None]
[1, 2]
>>> filter(lambda x: x != None, [1, 2, None])
[1, 2]
結果を平均して、None
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])
実際、それはクラッジでさえないかもしれません。 ウィキペディアは次のように述べています。
NaN は、計算で欠損値を表すために使用できます。
実際には、これは mean() 関数では機能しませんが、気にしないでください。:)
In [20]: mean([1, 2, NaN])
Out[20]: nan
フィルターを使用して、None を渡すこともできます。True 以外のオブジェクトもフィルター処理されます。0 も使用できます。:D したがって、0 も必要ない場合に使用します。
>>> filter(None,[1, 2, None])
[1, 2]