У меня есть 2D DataArray в xarray (координаты времени и давления воздуха) и дополнительная координата (высота, которая зависит от времени и давления воздуха), и я хочу интерполировать DataArray в фиксированную 1D координату высоты.
import xarray as xr
import numpy as np
pressure = np.arange(150,120, -12)
time = np.arange(0,2)
altitude = [np.arange(13,16)+0.1*i for i in range(len(time))]
da = xr.DataArray(np.random.rand(len(time), len(pressure)), coords=[time, pressure], dims=['time', 'pressure'])
da.coords['altitude']= xr.DataArray(altitude, coords=[time, pressure], dims=['time', 'pressure'])
Выходы:
<xarray.DataArray (time: 2, pressure: 3)>
array([[0.985852, 0.698494, 0.109433],
[0.741064, 0.465186, 0.255908]])
Coordinates:
* time (time) int32 0 1
* pressure (pressure) int32 150 138 126
altitude (time, pressure) float64 13.0 14.0 15.0 13.1 14.1 15.1
Я хочу интерполировать его на фиксированные значения высоты, например,
new_altitude = [13.2, 13.4, 13.6, 13.8, 14.0, 14.5]
, чтобы дать
<xarray.DataArray (time: 2, altitude: 6)>
array(interpolated data)
Coordinates:
* time (time) int32 0 1
* new_altitude (new_altitude) int32 13.2 13.4 13.6 13.8 14.0 14.5
Я не могу сделать
da_new_altitude = xr.DataArray(new_Altitude, dim='new_altitude')
da.interp(altitude=da_new_altitude)
потому что 2D-высота не является измерением данных в da, но я не могу просто использовать
da.swap_dims({'pressure': 'altitude'})
потому что высота - 2D координата, а давление - 1D.
Есть ли способ сделать это в xarray без ручной итерации по временной координате?