Маска скорости давления вверх в Python - PullRequest
0 голосов
/ 26 октября 2018

Я работаю в Python, чтобы создать средневзвешенную по площади скорость давления (омега, где отрицание считается "вверх") по заданной полосе широты, симметричной относительно экватора. По сути, я взвешиваю свои значения скорости давления по косинусу широты, потому что я суммирую (интегрирую) по широте. Кроме того, я установил массив для уровней давления и широтных диапазонов (omega_lat_p), а затем удалил сезонный цикл. Вот фрагмент моего кода:

#copy array for creating mask
mask = copy.deepcopy(omega_lat_p)

#change all positive omegas to NaN
#I simply switch these when I want to process the negative omega values
mask[np.where(mask > 0)] = np.nan

#replace negative values with ones
mask[np.where(mask < 0)] = 1

#create cos(lat) matrix
cos_lat = np.cos(np.deg2rad(lat[latidx]))
cos_lat_ = np.asmatrix(np.cos(np.deg2rad(lat[latidx]))).T
cos_lat_matrix = np.multiply(np.ones((27,240)), cos_lat_)

#Mcos(lat)
mask_coslat = np.multiply(mask, np.array(cos_lat_matrix))

#MXcos(lat)
mask_var_coslat = np.multiply(omega_lat_p, mask_coslat)

#nan mean over lat (along lon dimension)
mask_var_coslat_nanmean = np.nanmean(mask_var_coslat, axis=2)
mask_coslat_nanmean = np.nanmean(mask_coslat, axis=2)

#integrate, or sum over time dimension
int_mask_var_coslat = np.nansum(mask_var_coslat_nanmean, axis=0)
int_mask_coslat = np.nansum(mask_coslat_nanmean, axis=0)

#divide by cos(lat)
area_avg = np.divide(int_mask_var_coslat, int_mask_coslat)

Когда я это делаю, я получаю следующие изображения: вверх омега Омега вниз

Крайне маловероятно, что скорость восходящего и нисходящего давления симметрична относительно экватора, хотя график омега (синего цвета) выглядит правильно из наблюдений. Когда я печатаю int_mask_coslat для омега вверх и вниз, они заметно различаются. Это заставляет меня думать, что ошибка не в mask, но я не вижу, что еще это может быть. Но когда я создаю area_avg для омега вверх и вниз, я получаю почти идентичные значения (только положительные и отрицательные версии друг друга) до некоторого десятичного знака, что заставляет меня думать, что это просто ошибка округления.

Учитывая это, я должен заключить, что есть некоторая проблема с тем, как я вычисляю средневзвешенную площадь. Я нашел этот сайт, который ближе всего к тому, что я хочу сделать (за исключением того, что сам выполняю взвешивание): http://matplotlib.1069221.n5.nabble.com/Area-averaged-td42915.html

Однако сайт выше не создает маску, поэтому не совсем работает с np.average() из-за NaN. Кто-нибудь видит ошибку в маскировке?

Дополнительная информация: я кодирую в Jupyter Notebooks 5.5.0, используя ОС Windows 10.

...