Первый метод, который я использую, — это применить xr.full_like либо к температуре, либо к температуре. или xarray точки росы, чтобы создать еще один xarray той же формы, где все его значения представляют собой уровень давления изобары, на которую я смотрю, добавляя этот массив в набор данных с другими переменными, а затем передавая все эти массивы из набора данных, который к функции. Другой метод — просто передать целое число уровня изобарного давления и добавить к нему единицы, а затем передать массивы температуры и точки росы из набора данных в функцию. Я назвал эти методы ARRAY и SINGLE соответственно. Вот мой код и результаты, которые я получаю от него.
Примечание: набор данных xarray, который я здесь использую, представляет собой трехмерный набор данных с размерами (время, x, y) и температурой. Переменные ['TMP'] и точки росы ['DPT'].
КОД:
Код: Выделить всё
def pressure_generator(ds: xr.Dataset, pressure_level: int) -> xr.Dataset:
pressure_ds = xr.full_like(ds['TMP'], pressure_level).rename('PRES')
pressure_ds.attrs['units'] = 'hPa' # adding units to make it work in the metpy function
pressure_ds.attrs['long_name'] = 'pressure'
ds['PRES'] = pressure_ds # adding the newly created array to the dataset as the PRES variable
ds = ds.metpy.parse_cf()
return ds
# Example of running the code at the 1000mb isobar
ds = pressure_generator(ds, 1000) # the ds passed into the function here is a xr.Dataset containing 3D TMP and DPT array variables
array_1000mb = mpcalc.equivalent_potential_temperature(ds['PRES'], ds['TMP'], ds['DPT'])
single_1000mb = mpcalc.equivalent_potential_temperature(1000*units.hPa, ds['TMP'], ds['DPT'])
Код: Выделить всё
500mb
ARRAY METHOD
328.0
SINGLE METHOD
328.1153869628906
700mb
ARRAY METHOD
312.0
SINGLE METHOD
327.0259094238281
850mb
ARRAY METHOD
306.5
SINGLE METHOD
329.3340148925781
925mb
ARRAY METHOD
303.25
SINGLE METHOD
331.8924560546875
1000mb
ARRAY METHOD
300.0
SINGLE METHOD
334.6382141113281
Подробнее здесь: https://stackoverflow.com/questions/790 ... rray-or-in