Добавление измерения, координат и атрибутов в dataArray - PullRequest
0 голосов
/ 12 июня 2018

Я работаю над функцией, которая принимает одну xarray.DataArray sfc_p и int vert_res (где первая представляет собой поле поверхностного давления, а вторая - несколько вертикальных уровней), которая вычисляет давлениена всех вертикальных уровнях добавляет координаты, размеры и атрибуты и выводит xarray.DataArray pressure.

. Вычисление работает нормально, но моя проблема заключается в следующем:
Примером для sfc_p может бытьthis:

<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 с этим.
Но даже после нескольких часов чтения документации xArray я не нашел способа решить эту простую задачу добавления информации и метаданных, и я думаю, что ячто-то совершенно базовоеМожет ли кто-нибудь указать мне правильное направление?

1 Ответ

0 голосов
/ 15 июня 2018

Чтобы изменить атрибуты, это da.attrs['long_name'] = 'new_long_name'

Вы можете использовать http://xarray.pydata.org/en/stable/generated/xarray.DataArray.expand_dims.html, чтобы добавить измерение, взгляните также на пустой документ https://docs.scipy.org/doc/numpy/reference/generated/numpy.expand_dims.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...