f.a*_*uri 3 python arrays null numpy average
我正在努力numpy,我有许多具有相同大小和形状的阵列.它们是500*500.它有一些Null值.我希望有一个数组,它是我原始数组的逐个元素平均值的结果.例如:
A=[ 1 Null 8 Null; Null 4 6 1]
B=[ 8 5 8 Null; 5 9 5 3]
Run Code Online (Sandbox Code Playgroud)
结果数组应该是这样的:
C=[ 4.5 5 8 Null; 5 6.5 5.5 2]
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
更新:从NumPy 1.8开始,您可以使用np.nanmean代替scipy.stats.nanmean.
如果你有scipy,你可以使用scipy.stats.nanmean:
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. ])
Run Code Online (Sandbox Code Playgroud)
您可以在此处找到其他仅限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. ])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3633 次 |
| 最近记录: |