Правильный метод использования metpy.calc.equiвалентной_потенциальной_температуры: массив или целое числоPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Правильный метод использования metpy.calc.equiвалентной_потенциальной_температуры: массив или целое число

Сообщение Anonymous »

Я пытаюсь вычислить эквивалентную потенциальную температуру на изобаре (т. е. 1000 МБ, 925 МБ, 85 МБ и т. д.), используя функцию metpy и данные HRRR, хранящиеся на AWS, но у меня возникла проблема с переменной давления I. необходимо передать в функцию. Обычно для уровней переменных, не являющихся изобарами, существует переменная давления, которую вы можете загрузить; однако с изобарой у них этого нет, поскольку все точки данных будут находиться на одном уровне давления. Здесь я столкнулся со своей проблемой: у меня есть рентгеновские массивы температуры и точки росы из репозитория AWS, но нет значений давления. Когда я пытаюсь ввести значение давления, я пробую два разных метода, и оба дают разные результаты.
Первый метод, который я использую, — это применить 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
Как видно, средние значения тета-е различны для каждого метода на каждой изобаре, и одиночный метод кажется более действительным, чем метод массива, поскольку его значения фактически увеличиваются по мере увеличения человек приближается к поверхности земли, чего и следовало ожидать. Функция metpy, очевидно, передает одно значение давления при запуске функции, но я не могу понять, почему передача массива той же формы, что и другие переменные, приведет к другому значению.

Подробнее здесь: https://stackoverflow.com/questions/790 ... rray-or-in
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»