更新:NumPy 1.8では、の代わりにnp.nanmeanscipy.stats.nanmean
を使用できます。
持っている場合は、 scipy.stats.nanmeanscipy
を使用できます:
In [2]: import numpy as np
In [45]: import scipy.stats as stats
In [3]: nan = np.nan
In [43]: A = np.array([1, nan, 8, nan, nan, 4, 6, 1])
In [44]: B = np.array([8, 5, 8, nan, 5, 9, 5, 3])
In [46]: C = np.array([A, B])
In [47]: C
Out[47]:
array([[ 1., nan, 8., nan, nan, 4., 6., 1.],
[ 8., 5., 8., nan, 5., 9., 5., 3.]])
In [48]: stats.nanmean(C)
Warning: invalid value encountered in divide
Out[48]: array([ 4.5, 5. , 8. , nan, 5. , 6.5, 5.5, 2. ])
他のnumpyのみ(マスクされた配列)のソリューションは、ここにあります。つまり、
In [60]: C = np.array([A, B])
In [61]: C = np.ma.masked_array(C, np.isnan(C))
In [62]: C
Out[62]:
masked_array(data =
[[1.0 -- 8.0 -- -- 4.0 6.0 1.0]
[8.0 5.0 8.0 -- 5.0 9.0 5.0 3.0]],
mask =
[[False True False True True False False False]
[False False False True False False False False]],
fill_value = 1e+20)
In [63]: np.mean(C, axis = 0)
Out[63]:
masked_array(data = [4.5 5.0 8.0 -- 5.0 6.5 5.5 2.0],
mask = [False False False True False False False False],
fill_value = 1e+20)
In [66]: np.ma.filled(np.mean(C, axis = 0), nan)
Out[67]: array([ 4.5, 5. , 8. , nan, 5. , 6.5, 5.5, 2. ])