2017-07-26 108 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