1

重複の可能性:
NumPy: NaN を削除して平均を計算する

同じ形のnumpy配列がいくつかあります。少しひねりを加えて点ごとの平均を取りたいと思いnp.nanます。平均化では値を無視する必要があります。言い換えれば、average(np.array([1,2,3]), np.array([5,np.nan,7]), np.array([np.nan, 4, 2])等しいはずnp.array([3,3,4])です。

もちろん、各numpy配列内の要素を反復処理することでそれを行うことができますが、それを避けたいと思っていました. この機能を実装するより良い方法はありますか?

(Python 3 ですが、問題になるとは思えません。)

4

2 に答える 2

4

scipy.stat'sを使用できますnanmean

import numpy as np
from scipy.stats import nanmean
s = np.array([[1.0, 2.0, 3.0], [5.0, np.nan, 7.0], [np.nan, 4.0, 2.0]])

In [4]: nanmean(s)
Out[4]: array([ 3.,  3.,  4.])

@Dougalはコメントの中で、bottleneckいくつかのnumpy/scipy関数の実装が大幅に高速なパッケージに。が含まれていることを指摘していますnanmean

于 2012-12-09T23:12:51.027 に答える
1

配列をマスクされた配列に変換し( fix_invalidですべてのNaNをマスクする)、そこで操作を実行することもできます。

new_array = np.ma.fix_invalid(my_array)
print np.mean(new_array)

それが平均的なものである場合、nanmean@haydenによって提案されたものは約4倍高速です。ただし、配列に対して他の操作を実行する場合は、代わりにマスクされた配列を使用することをお勧めします。

于 2012-12-09T23:50:41.000 に答える