使用 xarray 在 netCDF 中输出 int32 时间维度
Output int32 time dimension in netCDF using xarray
假设我在 xarray 数据集中有如下所示的时间数据:
ds = xr.Dataset({'time': pd.date_range('2000-01-01', periods=10)})
ds.to_netcdf('asdf.nc')
xarray 的 to_netcdf()
方法将时间维度输出为 int64:
$ ncdump -v time asdf.nc
netcdf asdf {
dimensions:
time = 10 ;
variables:
int64 time(time) ;
time:units = "days since 2000-01-01 00:00:00" ;
time:calendar = "proleptic_gregorian" ;
data:
time = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ;
}
因为我正在使用不支持 int64 的 THREDDS 服务器,所以我希望这些时间数据是 int32。使用 xarray 可以做到这一点吗?
您可以通过 encoding
属性 或 to_netcdf
的 encoding
关键字参数指定每个输出变量的数据类型。在您的示例中,这看起来像:
ds.to_netcdf('asdf.nc', encoding={'time': {'dtype': 'i4'}})
可以在 xarray 文档中找到有关写入编码数据的更多信息:http://xarray.pydata.org/en/latest/io.html#writing-encoded-data
假设我在 xarray 数据集中有如下所示的时间数据:
ds = xr.Dataset({'time': pd.date_range('2000-01-01', periods=10)})
ds.to_netcdf('asdf.nc')
xarray 的 to_netcdf()
方法将时间维度输出为 int64:
$ ncdump -v time asdf.nc
netcdf asdf {
dimensions:
time = 10 ;
variables:
int64 time(time) ;
time:units = "days since 2000-01-01 00:00:00" ;
time:calendar = "proleptic_gregorian" ;
data:
time = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ;
}
因为我正在使用不支持 int64 的 THREDDS 服务器,所以我希望这些时间数据是 int32。使用 xarray 可以做到这一点吗?
您可以通过 encoding
属性 或 to_netcdf
的 encoding
关键字参数指定每个输出变量的数据类型。在您的示例中,这看起来像:
ds.to_netcdf('asdf.nc', encoding={'time': {'dtype': 'i4'}})
可以在 xarray 文档中找到有关写入编码数据的更多信息:http://xarray.pydata.org/en/latest/io.html#writing-encoded-data