Я работаю над функцией, которая принимает один xarray.DataArraysfc_p и intvert_res (где первый представляет поле давления на поверхности, а второй - несколько вертикальных уровней), которая вычисляет давление на всех вертикальных уровнях, добавляет координаты, размеры и атрибуты. и выводит xarray.DataArraypressure.
Вычисление работает нормально, но моя проблема в следующем:
Пример для sfc_p может быть таким:
<xarray.DataArray 'sp' (time: 1, ens: 51, lat: 66, lon: 131)>
dask.array<shape=(1, 51, 66, 131), dtype=float32, chunksize=(1, 1, 66, 131)>
Coordinates:
* lon (lon) float32 -100.0 -99.0 -98.0 -97.0 -96.0 -95.0 -94.0 -93.0 ...
* lat (lat) float32 85.0 84.0 83.0 82.0 81.0 80.0 79.0 78.0 77.0 76.0 ...
* ens (ens) int32 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ...
* time (time) datetime64[ns] 2016-11-02T12:00:00
Attributes:
units: Pa
long_name: Surface pressure
standard_name: surface_air_pressure
cf_short_name: sp
short_name: sp
grid_type: regular_ll <xarray.DataArray 'sp' (time: 1, ens: 51, lat: 66, lon: 131)>
Теперь я хочу, чтобы выходной массив взял на себя большинство этих свойств с дополнительным измерением (после time и ensemble) и скоординировал hybrid, который просто range(1, vert_res + 1), и чтобы некоторые атрибуты были изменены, например
<xarray.DataArray 'sp' (time: 1, ens: 51, hybrid:137, lat: 66, lon: 131)>
dask.array<shape=(1, 51, 137, 66, 131), dtype=float32, chunksize=(1, 1, 137, 66, 131)>
Coordinates:
* lon (lon) float32 -100.0 -99.0 -98.0 -97.0 -96.0 -95.0 -94.0 -93.0 ...
* lat (lat) float32 85.0 84.0 83.0 82.0 81.0 80.0 79.0 78.0 77.0 76.0 ...
* hybrid (hybrid) int32 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ...
* ens (ens) int32 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ...
* time (time) datetime64[ns] 2016-11-02T12:00:00
Attributes:
units: Pa
long_name: modified
standard_name: modified
cf_short_name: modified
short_name: modified
grid_type: modified
В настоящее время я вычисляю np.ndarray pressureVals (с правильной выходной формой) для значений, а затем инициализирую свой выходной xarray.DataArray с помощью this.
Но даже после нескольких часов чтения документации xArray я не нашел способа выполнить эту простую задачу добавления информации и метаданных, и я думаю, что мне не хватает чего-то совершенно простого. Может ли кто-нибудь указать мне правильное направление?





Чтобы изменить атрибуты, это
da.attrs['long_name'] = 'new_long_name'
Возможно, вы сможете использовать http://xarray.pydata.org/en/stable/generated/xarray.DataArray.expand_dims.html, чтобы добавить измерение, посмотрите также numpy doc https://docs.scipy.org/doc/numpy/reference/generated/numpy.expand_dims.html