更改netcdf4数据类型

时间:2018-04-14 18:35:36

标签: netcdf netcdf4 nco

我有一个netCDF4数据文件,其中时间变量存储为float (netCDF: 'f8', numpy: float64),我需要将其更改为32位int (netCDF: 'i4', numpy: int32)。我试过在python中进行更改

tds.variables['time'][:] = np.int32(tds.variables['time'][:])

但这还没有奏效。进行此更改的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

由于您使用nco标记了问题,我认为使用nco的解决方案也是可以接受的..这可以使用ncap2完成(例如我使用的是NetCDF文件周围):

ncdump -h drycblles.default.0000000.nc`:

给出:

netcdf drycblles.default.0000000 {
dimensions: 
    z = 128 ;
    zh = 129 ;
    t = UNLIMITED ; // (37 currently)
variables:  
    double t(t) ;
        t:units = "s" ;
        t:long_name = "Time" ;
.....

相同的转储(修改后的文件):

ncap2 -s 't=int(t)' drycblles.default.0000000.nc drycblles.default.0000000_2.nc

给出:

int t(t) ;
    t:long_name = "Time" ;
    t:units = "s" ;

您在Python中尝试的内容将无效,因为您将变量time数据转换为int,但仍将其存储为float (您不更改NetCDF文件中的变量类型)。我没有看到任何更改数据类型的选项,我猜你可以将变量time复制到另一个名称,创建一个类型为time的新变量int,复制数据,并删除旧的time变量。