Я хочу создать файл 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)