Сопоставление координат в наборе данных xarray/массиве данных

#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)