#python #python-xarray
Вопрос:
Каков рекомендуемый способ реализации сопоставления координат между данными xarray?
Вот мой пример/случай:
У меня есть один массив ndo3_1
данных со следующими координатами «[время, плев, широта, долгота]». Затем у меня есть еще один h
массив данных с надписью «[время, плев, лат, лон]».
(plev-это уровень давления, а h-высота)
Мне нужно преобразовать «ndo3_1[время, плев, лат, лон]» в «ndo3_2[время, ч, лат, лон]». Как вы можете видеть h
, это всего лишь матрица преобразования, так plev
как некоторые модели легче представить при равных давлениях. Однако другие легче справляются с ростом.
Возможно ли этого достичь? Какой способ был бы рекомендован?
Примечание. Цикл «для» в python будет очень медленным, правильный ответ будет использовать функциональный подход с использованием операций xarray.
Ответ №1:
Не уверен, что это поможет:
import xarray as xr
import numpy as np
from scipy.interpolate import interp1d
# create DataArrays
plev = np.arange(1, 100)
lat = np.arange(-90, 91)
lon = np.arange(-180, 181)
time = np.arange(0, 365)
x = xr.DataArray(np.random.rand(len(time), len(plev), len(lat), len(lon)),
coords=[('time', time), ('plev', plev), ('lat', lat), ('lon', lon)])
h = xr.DataArray(np.random.rand(len(time), len(plev), len(lat), len(lon)),
coords=[('time', time), ('plev', plev), ('lat', lat), ('lon', lon)])
# create interpolation function
f = interp1d(plev, h.plev, fill_value='extrapolate', axis=1)
# create new array
ndo3_2 = xr.DataArray(np.zeros(x.shape), coords=[('time', time), ('plev', h.plev), ('lat', lat), ('lon', lon)])
# interpolate
ndo3_2.plev = f(x.plev)
# print
print(ndo3_2)