首页 > 解决方案 > 为什么不同的软件和命令在根据 ERA5 每小时数据计算每日平均值时会产生不同的结果?

问题描述

基本上,这是来自如何从 ERA5 每小时 netCDF 数据计算每日平均值? 我有四个大气变量,即。露点温度、长波辐射、短波辐射和风速(根据 u10 和 v10 风分量计算)。所有都是小时刻度,我需要将它们转换为日刻度(请注意,这里我只给出了露点温度的例子)。为了首先做到这一点,我应用了以下命令

cdo daymean -shifttime,-1hour d2m.nc d2m_wb.nc 并得到以下结果。

cdo sinfo d2m_wb.nc
   File format : NetCDF2
    -1 : Institut Source   T Steptype Levels Num    Points Num Dtype : Parameter ID
     1 : unknown  unknown  v instant       1   1       475   1  F64  : -1
   Grid coordinates :
     1 : lonlat                   : points=475 (19x25)
                              lon : 85.5 to 90 by 0.25 degrees_east
                              lat : 21.5 to 27.5 by 0.25 degrees_north
   Vertical coordinates :
     1 : surface                  : levels=1
   Time coordinate :  25904 steps
     RefTime =  1900-01-01 00:00:00  Units = hours  Calendar = gregorian  Bounds = true
  YYYY-MM-DD hh:mm:ss  YYYY-MM-DD hh:mm:ss  YYYY-MM-DD hh:mm:ss  YYYY-MM-DD hh:mm:ss
  1949-12-31 23:00:00  1950-01-01 11:00:00  1950-01-02 11:00:00  1950-01-03 11:00:00
  1950-01-04 11:00:00  1950-01-05 11:00:00  1950-01-06 11:00:00  1950-01-07 11:00:00
  1950-01-08 11:00:00  1950-01-09 11:00:00  1950-01-10 11:00:00  1950-01-11 11:00:00
  1950-01-12 11:00:00  1950-01-13 11:00:00  1950-01-14 11:00:00  1950-01-15 11:00:00
  1950-01-16 11:00:00  1950-01-17 11:00:00  1950-01-18 11:00:00  1950-01-19 11:00:00
  1950-01-20 11:00:00  1950-01-21 11:00:00  1950-01-22 11:00:00  1950-01-23 11:00:00
  1950-01-24 11:00:00  1950-01-25 11:00:00  1950-01-26 11:00:00  1950-01-27 11:00:00
  1950-01-28 11:00:00  1950-01-29 11:00:00  1950-01-30 11:00:00  1950-01-31 11:00:00
  ..................................................................................
   ................................................................................
   ................................................................................
   .................
  2020-10-31 11:00:00  2020-11-01 11:00:00  2020-11-02 11:00:00  2020-11-03 11:00:00
  2020-11-04 11:00:00  2020-11-05 11:00:00  2020-11-06 11:00:00  2020-11-07 11:00:00
  2020-11-08 11:00:00  2020-11-09 11:00:00  2020-11-10 11:00:00  2020-11-11 11:00:00
  2020-11-12 11:00:00  2020-11-13 11:00:00  2020-11-14 11:00:00  2020-11-15 11:00:00
  2020-11-16 11:00:00  2020-11-17 11:00:00  2020-11-18 11:00:00  2020-11-19 11:00:00
  2020-11-20 11:00:00  2020-11-21 11:00:00  2020-11-22 11:00:00  2020-11-23 11:00:00
  2020-11-24 11:00:00  2020-11-25 11:00:00  2020-11-26 11:00:00  2020-11-27 11:00:00
  2020-11-28 11:00:00  2020-11-29 11:00:00  2020-11-30 11:00:00  2020-12-31 23:00:00
cdo    sinfo: Processed 1 variable over 25904 timesteps [6.03s 37MB

结果(每日平均值)对我来说似乎很可疑(因为它有时间戳11:00:00)。因此,我在 CDO 论坛上提出了同样的问题,他们建议向后移动 1 分钟而不是 1 小时。

cdo daymean -shifttime,-1min d2m.nc d2m_wb.nc

在这里,时间戳 (of d2m_wb.nc) 显示12:00:00而不是11:00:00。我不确定结果是否正确。因此,我尝试使用 python (3.8.5) 中的以下脚本对此进行交叉检查。

import xarray as xr
hourly_d2m = xr.open_dataset(r'E:\Data\Rda\d2m\d2m.nc')
d2m = hourly_d2m['d2m']
d2m= hourly_d2m.shift(time=-1).dropna(dim='time',how='all') 
sds = d2m.resample(time='D').mean(dim='time')
sds.to_netcdf('E:\Data\Rda\d2m\daily\d2m_wb.nc')

00:00:00在计算 的每日平均值后,我得到了时间戳d2m_wb.nc。现在,问题是不同的软件和命令会产生共同目标(即每日平均值)的不同结果。我完全困惑并寻找合适的解决方案或澄清。谢谢你。

标签: pythonnetcdfcdo-climateera5

解决方案


考虑重新阅读我对您上一个问题的回答。正如我当时所说,在聚合输出中使用哪个时间步长软件有点武断。这就是 CDO 为用户提供更改它的选项的原因。例如,如果需要,您可以将其设置为被平均的第一个或最后一个时间步。xarray 对选择哪个时间步长使用略有不同的假设。就选择的时间步长而言,没有对错之分。它们都实现了相同的目标,即为您提供正确日期的时间平均值。


推荐阅读