Как мне создать xarray.Dataset, который помещает правильное значение заполнения в мой выходной файл netCDF? - PullRequest
0 голосов
/ 26 июня 2019

Я хочу создать файл netcdf с одной переменной с именем data, которая имеет одно значение, которое маскируется.

Попытка 1: исправить xarray.Dataset, неверный файл netcdf

Я попытался создать xarray.Dataset из массива с массивными масками.

In [1]: import numpy as np; import numpy.ma as ma; import xarray as xr;                                                                                                                                  

In [2]: data = ma.array([-9999.0],mask=[True],fill_value=-9999.0)                                                                                                                                        

In [3]: dataset = xr.Dataset({'data':xr.DataArray(data,attrs={'_FillValue':-9999.0})})                                                                                                                   

In [4]: dataset.to_netcdf('data.nc',format='NETCDF4_CLASSIC')                                                                                                                                              

Когда я возвращаю переменную «data» обратно в виде маскированного массива, я получаю что-то напуганноезаполнить значение, но замаскированный массив, по крайней мере, выглядит хорошо:

In [7]: dataset['data'].to_masked_array()                                                                                                                                                               
Out[7]: 
masked_array(data=[--],
             mask=[ True],
       fill_value=1e+20,
            dtype=float64)

, но когда я выкидываю файл netcdf, значение данных будет NaN вместо моего значения заполнения, -9999.:

$ ncdump data.nc
netcdf data {
dimensions:
        dim_0 = 1 ;
variables:
        double data(dim_0) ;
                data :_FillValue = -9999. ;
data:

 data = NaN ;
}

Попытка 2: плохо xarray.Dataset, правильный файл netcdf

Я попытался создать набор данных, используя пустой список Python со значением заполнения:

In [20]: dataset = xr.Dataset({'data':xr.DataArray([-9999.0],attrs={'_FillValue':-9999.0})})                                                                                                             

In [21]: dataset.to_netcdf('data.nc',format='NETCDF4')  

Это создает правильный файл netcdf:

$ ncdump data.nc
netcdf data {
dimensions:
        dim_0 = 1 ;
variables:
        double data(dim_0) ;
                data :_FillValue = -9999. ;
data:

 data = _ ;
}

, но сам набор данных не работает правильно, когда я пытаюсь получить данные.Маскированный массив показывает значение заполнения как данные, а не маскирует их:

In [22]: dataset['data'].to_masked_array()                                                                                                                                                               
Out[22]: 
masked_array(data=[-9999.0],
             mask=[False],
       fill_value=1e+20)
...