2016-08-08 8 views
0

2次元配列を含む辞書があります。私はこの方法で平均を計算しようとしましたが、配列にもnan値が含まれているため動作しません。平均を計算する簡単な方法はありますか?2次元配列のnp.nanmeanの計算方法

All = np.zeros(385000).reshape(550,700) 

for i in dic.keys(): 
    a = dic[i]['data'] 
    avg = (All+a)/len(dic.keys()) 
+0

あなたは 'np.nanmean'を試しましたが、それはうまくいかなかったのですか?どのように使ったのですか? – Divakar

+0

私はa = np.array([2、np.nan、5,4])。reshape(2,2)とb = np.array([np.nan、3,7,2])と仮定します。 (2,2)、私はnp.nanmean(a、b)を計算しようとしましたが、うまくいきません...上記の例ではarray([[2,3]、[6,3])のような結果が期待されます – bikuser

答えて

1

あなたがNaNsを無視して、両方の入力ab渡っ要素ごと考慮平均を発見しようとしているようです。したがって、1つの方法は、np.dstackでこれらの2つの配列を積み重ねることです。abを3番目の軸に沿って積み重ねて、同じ軸に沿ってnp.nanmeanを単純に使用します。

np.nanmean(np.dstack((a,b)),axis=2) 

サンプル実行 - - 掲載のコードに示すように、あなたが辞書からのもの2Dの配列を取得することとなる場合については

In [28]: a 
Out[28]: 
array([[ 2., nan], 
     [ 5., 4.]]) 

In [29]: b 
Out[29]: 
array([[ nan, 3.], 
     [ 7., 2.]]) 

In [30]: np.nanmean(np.dstack((a,b)),axis=2) 
Out[30]: 
array([[ 2., 3.], 
     [ 6., 3.]]) 

したがって、我々はそうのようなシンプル実装を持っているでしょうループの理解度を使って、配列をnp.dstack3D配列として収集し、最終的にはnp.nanmeanを最後の軸に沿って使用すると、

のようになります0
np.nanmean(np.dstack([d['data'] for d in dic]),axis=2) 
+0

これは私が期待していたものです:)しかし、上記の問題にこれを実装するのを手伝ってください。 – bikuser

+0

@bikuserこれについては、上記の問題で 'a'と' b'が何であるか知る必要があります。 – Divakar

+0

のように、forループ 'a'は2次元配列です。だから、私は2次元配列の数が平均から計算したいと思っています...あなたが理解することを願っています – bikuser