如何创建将正确的填充值放入输出netCDF文件的xarray.Dataset?

时间:2019-06-26 20:52:36

标签: numpy python-3.7 python-xarray netcdf4

我想创建一个名为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)

0 个答案:

没有答案