1

我有一个 ERA5 nc 文件,记录了从 3 月到 10 月的每小时降水量,时间跨度为 30 年。数据是从当地时间午夜到中午(所以 UTC 时区的凌晨 4 点到下午 4 点)。我需要找到每个像素直到中午的每日降水量。我以前用过python

daily_precipitation = ERA5.tp.resample(time='24H').sum('time')*1000

但是十月和三月之间的日子也被总结出来了,我不需要那个。

当我使用 cdo daysum

cdo daysum precip_hourly.nc precip_sum.nc

我收到一个错误:

Warning: Some data values (min=-32766 max=52989) are outside the valid range (-32768 - 32767) of the used output precision!
Use the CDO option -b F32 or -b F64 to increase the output precision.
cdf_put_vara_double: name=tp  type=NC_SHORT  minval=-32766.000000  maxval=52989.000000

我该如何克服这个错误,实际上出了什么问题?

4

1 回答 1

1

答案在错误消息中(CDO 试图提供帮助),您需要将文件从 2 字节压缩整数转换为浮点数

 cdo -b f32 daysum in.nc out.nc

许多像 ecmwf 这样的中心会打包他们的数据。这意味着字段存储为整数(2 字节),然后对其进行缩放并添加偏移量以获得原始字段。如果您尝试查看元数据

 ncdump -h file.nc 

您将在元数据中看到这些偏移和比例因子。问题是当您组合具有不同打包因素的文件时,cdo 不知道该怎么做。它不是自动解包,而是强制您手动指定它,因为您必须选择是单精度还是双精度(4 或 8 个字节)。显然,文件大小将因此增加一倍或四倍。

于 2022-02-04T16:06:24.530 回答