0
Я маскирую свой массив, где значения являются nodata (-9999), вычисляют среднее значение по оси = 0, а затем разоблачают мой массив данных, но тогда мои значения нодата меняются на 0, но теперь, как провести различие между «рассчитанными средними 0» и «nodata 0's». См следующий пример кода:Размаскивание маскированных массивов Numpy изменяет маскированные значения на 0
In [1]: import numpy.ma as ma
...: x = [[0.,1.,-9999.,3.,4.],[0.,2.,-9999,4.,5.]]
...: x
Out[1]: [[0.0, 1.0, -9999.0, 3.0, 4.0], [0.0, 2.0, -9999, 4.0, 5.0]]
In [2]: mx = ma.masked_values(x, -9999.)
...: mx
Out[2]:
masked_array(data =
[[0.0 1.0 -- 3.0 4.0]
[0.0 2.0 -- 4.0 5.0]],
mask =
[[False False True False False]
[False False True False False]],
fill_value = -9999.0)
In [3]: mean = mx.mean(axis=0)
...: mean
Out[3]:
masked_array(data = [0.0 1.5 -- 3.5 4.5],
mask = [False False True False False],
fill_value = 1e+20)
In [4]: mean.mask = ma.nomask
...: mean
Out[4]:
masked_array(data = [0.0 1.5 0.0 3.5 4.5],
mask = [False False False False False],
fill_value = 1e+20)
Но я хотел бы иметь результат, похожий на мой вход, с NoData значениями, -9999, как:.
In [4]: mean.mask = ma.nomask
...: mean
Out[4]:
masked_array(data = [0.0 1.5 -9999. 3.5 4.5],
mask = [False False False False False],
fill_value = 1e+20)
Вот оно! Благодаря! Я могу принять ваш ответ в течение 30 секунд. – Mattijn
@Mattijn На самом деле вам даже не нужно 'mean.mask = ma.nomask', так как присвоение маскированному значению автоматически устанавливает маску на' False'. Обновлен ответ. –
OK, спасибо за обновление! – Mattijn