我想创建一个名为data
且具有单个值且被屏蔽的变量的netcdf文件。
尝试1:更正xarray.Dataset
,错误的netcdf文件
我尝试从一个numpy掩码数组创建一个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)