更改 netcdf4 数据类型

问题描述 投票:0回答:1

我有一个 netCDF4 数据文件,其中时间变量存储为浮点数

(netCDF: 'f8', numpy: float64)
,我需要将其更改为 32 位 int
(netCDF: 'i4', numpy: int32)
。我尝试过在 python 中进行更改

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

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

netcdf netcdf4 nco
1个回答
7
投票

既然你用

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

data
转换为
int
,但仍将其存储为
float
(您不会更改 NetCDF 中的变量类型)文件)。我没有看到任何更改数据类型的选项,我想您可以将变量
time
复制到另一个名称,创建一个类型为
time
的新变量
int
,复制数据,然后删除旧的变量
time
变量。

对于 2024 年解决方案,

xarray

import xarray as xr
ds = xr.open_dataset('your.nc')
ds['time'] = ds['time'].astype('int')
ds.to_netcdf('your_new.nc')
© www.soinside.com 2019 - 2024. All rights reserved.