создать файл netCDF с xarray, определить переменные типы данных - PullRequest
2 голосов
/ 11 марта 2019

Я создал файл netCDF с xarray для ввода информации о высоте топографии, информации о типе поверхности и т. Д. В численную модель прогнозирования погоды.Мне удалось создать файл, однако модель требует, чтобы разные переменные были разных типов данных.

Мой набор данных bolund_static выглядит следующим образом:

<xarray.Dataset>
Dimensions:          (x: 800, y: 200)

Coordinates:
  * y                (y) float64 1.0 3.0 5.0 7.0 9.0 ... 393.0 395.0 397.0 399.0
  * x                (x) float64 1.0 3.0 5.0 ... 1.595e+03 1.597e+03 1.599e+03
Data variables:
    zt               (y, x) float64 1.0 1.0 1.0 1.0 1.0 ... 1.0 1.0 1.0 1.0 1.0
    vegetation_type  (y, x) float64 -127.0 -127.0 -127.0 ... -127.0 -127.0
    water_type       (y, x) float64 3.0 3.0 3.0 3.0 3.0 ... 3.0 3.0 3.0 3.0 3.0
    soil_type        (y, x) float64 -127.0 -127.0 -127.0 ... -127.0 -127.0
    pavement_type    (y, x) float64 -127.0 -127.0 -127.0 ... -127.0 -127.0
Attributes:
    version:         1
    origin_z:        0.0
    origin_y:        694682.098
    origin_x:        6177441.825
    origin_lat:      12.098271
    origin_lon:      55.70364
    rotation_angle:  0.0
    palm_version:    6.0
    origin_time:     2019-04-01 12:00:00 +01

Сохраняя этот массив с помощью bolund_static.to_netcdf (), он сохраняет все переменные в виде двойных типов данных.Эту информацию я получил, создав ncdump из созданного netcdf-файла.

netcdf bolund_static {
dimensions:
    y = 200 ;
    x = 800 ;
variables:
    double y(y) ;
        y:_FillValue = NaN ;
    double x(x) ;
        x:_FillValue = NaN ;
    double zt(y, x) ;
        zt:_FillValue = NaN ;
    double vegetation_type(y, x) ;
        vegetation_type:_FillValue = NaN ;
    double water_type(y, x) ;
        water_type:_FillValue = NaN ;
    double soil_type(y, x) ;
        soil_type:_FillValue = NaN ;
    double pavement_type(y, x) ;
        pavement_type:_FillValue = NaN ;

// global attributes:
        :version = 1 ;
        :origin_z = 0. ;
        :origin_y = 694682.098 ;
        :origin_x = 6177441.825 ;
        :origin_lat = 12.098271 ;
        :origin_lon = 55.70364 ;
        :rotation_angle = 0. ;
        :palm_version = 6. ;
        :origin_time = "2019-04-01 12:00:00 +01" ;
data: <...>

Мне бы понадобились vegetation_type, water_type, ground_type и pavement_type, чтобы иметь тип NC_BYTE вместо NC_DOUBLE после экспорта и x, y,zt как NC_FLOAT.Как бы я изменил эти типы данных?Возможно ли это из среды xarray / Python?

1 Ответ

2 голосов
/ 12 марта 2019

При сохранении набора данных вы можете использовать параметр encoding, который принимает ввод в качестве словаря.

bolund_static.to_netcdf(filename.nc, encoding={'var1':{'dtype':'int8'}, 'var2':{'dtype':'int8'}})
# replace var1, var2 with your desired variable names
# for NC_float save dtype as int32, for NC_Byte save as int8

Вы также можете изменять другие атрибуты переменной, такие как _FillValue и т. Д. Другойважно отметить, что xarray автоматически сохраняет единицу времени из ближайшего возможного времени запуска по умолчанию.Если вы хотите изменить это, вы можете сделать то же самое, что и

bolund_static.to_netcdf(filename.nc, encoding={'var1':{'dtype':'int8'},\
'var2':{'dtype':'int8'}, 'origin_time':{'units':'seconds/hours since a 2000-01-01 00:00:00'}})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...