如何用nan值平均二维数组?

时间:2018-11-21 16:35:09

标签: python python-3.x python-2.7 numpy python-2.x

我有12个.grd文件以二维数组的格式保存在同一路径中。

为求平均值,我使用了简单的循环方法

ave_value = np.zeros_like(test_array) # generate a zero-array firstly
for i in range(0,12,1):
    file_path = %(i+1)+'.grd' #1.grd, 2.grd,...
    # read_grd is an user-defined function
    value, nodata_value = read_grd(file_path)
    value[value == nodata_value] = np.nan    
    ave_value_+=value
ave_value = ave_value/12.0 

但是,我发现此功能未能考虑到该位置包含一些np.nan值。

例如,一个网格文件中的位置[2,2]为np.nan,但在其他数据集中具有某些值。然而,在上述平均过程中,导出的 ave-value 中的平均值也是np.nan。

是否有更好的解决方案来平均涉及np.nan值的不同二维数组,即,如果特定位置的值在3个文件中为np.nan,则我们仅对其他9个文件中的相应值进行平均。

任何建议都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

您可以使用np.nanmean()https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.nanmean.html

a = np.array([np.nan, 3.4, 5.2, np.nan, 1.2])
b = np.nanmean(a)
print(b)

>>> 3.266666666667

对于2D数组(或n维数组),您可以使用axis关键字来指定要如何计算平均值。