2017-07-26 36 views
1

我有一个带有标准浮点字段的大型netcdf文件,它只包含0.0或1.0。我想从命令行将其转换为字节类型以节省一些空间,并且还可以使数组更容易在Fortran中读取字节类型。将netcdf文件中的浮点数转换为字节

我试图用NCAP

ncap -s 'fire=byte(fire)' CAMS_2003-2017_frp_mask2_africa_zip.nc test.nc 

,但它只是似乎归零的所有字段。我在源文件上使用zip_6 netcdf4压缩,我不确定这是否会使事情复杂化?

更新:我发现ncap2可与字节

ncap2 -s 'fire=byte(fire)' CAMS_2003-2017_frp_mask2_africa_zip.nc test.nc 

但我不明白为什么这两个有什么区别?这可能是一个内存问题,因为ncap和nca​​p2在尝试转换为“int”而不是“byte”时会失败并返回内存分配。

+0

你得到所有零,如果你投以'int'取代'byte'? – jhamman

+0

有趣的是,使用int而不是字节会导致内​​存故障。但我发现这个字节与ncap2一起工作......不知道为什么行为不同,可能ncap也会遇到字节的内存问题? –

+0

ncap2!= ncap。始终使用ncap2。 ncap已弃用。无法重现当前NCO在〜1度全局数据集中提到的内存故障。 –

回答

1

我发现这样做的方法有两种:

cdo -b I8 copy in.nc out.nc 

ncap2 -s 'fire=byte(fire)' in.nc out.nc