Извлечение средних значений из замаскированного двумерного массива

Селектор CSS « General Sibling Combinator » может быть использован для того, что вы хотите:

E ~ F {
    property: value;
}

Это соответствует любому элементу F, которому предшествует E ].

2
задан rrigaud 28 March 2019 в 11:48
поделиться

2 ответа

Помните, что любой простой расчет среднего значения (суммирование и деление на сумму), такой как np.mean, не даст вам правильного ответа, если вы будете усреднять по сетке широты, поскольку область меняется по мере вашего движения к поляки Вам нужно взять средневзвешенное значение, взвешивающее по cos (lat).

Поскольку вы говорите, что у вас есть данные в формате netcdf, я надеюсь, что вы позволите мне предложить альтернативное решение из командной строки с помощью служебных операторов климатических данных (cdo) (в ubuntu вы можете установить с помощью sudo apt install cdo) .

, чтобы извлечь интересующую область:

cdo sellonlatbox,lon1,lon2,lat1,lat2 infile.nc outfile.nc

, затем вы можете определить правильное взвешенное среднее с

cdo fldmean infile.nc outfile.nc

, вы можете связать их вместе следующим образом:

cdo fldmean -sellonlatbox,lon1,lon2,lat1,lat2 infile.nc outfile.nc
0
ответ дан Adrian Tompkins 28 March 2019 в 11:48
поделиться

Проблема в том, что вызов np.ma.filled будет демаскировать переменную long. Также np.meshgrid не сохраняет маски.

Вы можете сохранить маски сразу после создания, а также создать сетку из масок. Я адаптировал ваш пример соответственно. Что можно видеть, так это то, что все версии numpy mean учитывают маску. Мне пришлось адаптировать верхний предел (изменился на 2), потому что среднее было равным.

x = np.linspace(1, 10, 10)
y = np.linspace(1, 10, 10)

xm = np.median(x)
ym = np.median(y)

# Note: changed limits
x = np.ma.masked_outside(x, xm-3, xm+2)
y = np.ma.masked_outside(x, ym-3, ym+2)
xmask = np.ma.getmask(x)
ymask = np.ma.getmask(y)

x, y = np.meshgrid(x, y)
xmask, ymask = np.meshgrid(xmask, ymask)

z = 2*x + 3*y


z1 = np.ma.masked_where(np.ma.getmask(x), z)
z2 = np.ma.masked_where(xmask | ymask, z)
print(z1)
print(z2)

print('Type z1, z2:', type(z1), type(z2))
print('Maximum z1, z2:', np.nanmax(z1), np.nanmax(z2))
print('Minimum z1, z2:', np.nanmin(z1), np.nanmin(z2))
print('Mean z1, z2:', np.mean(z1), np.mean(z2) )
print('nan Mean z1, z2:', np.nanmean(z1), np.nanmean(z2) )
print('masked Mean z1, z2:', z1.mean(), z2.mean())
0
ответ дан kmuehlbauer 28 March 2019 в 11:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: