Как усреднить двумерные массивы со значениями nan? - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть 12 .grd файлов, сохраненных по одному пути в формате 2-го массива.

Для усреднения их значений я использовал метод простой петли

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, т. Е. Если значения определенной позиции равны np.nan в 3 файлах, мы только усредняем соответствующие значения в других9 файлов.

Буду признателен за любые советы или предложения.

1 Ответ

0 голосов
/ 21 ноября 2018

Вы можете использовать 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, чтобы указать, как вы хотите вычислитьимею в виду.

...