python - 为什么不同的软件和命令在根据 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
。现在,问题是不同的软件和命令会产生共同目标(即每日平均值)的不同结果。我完全困惑并寻找合适的解决方案或澄清。谢谢你。
解决方案
考虑重新阅读我对您上一个问题的回答。正如我当时所说,在聚合输出中使用哪个时间步长软件有点武断。这就是 CDO 为用户提供更改它的选项的原因。例如,如果需要,您可以将其设置为被平均的第一个或最后一个时间步。xarray 对选择哪个时间步长使用略有不同的假设。就选择的时间步长而言,没有对错之分。它们都实现了相同的目标,即为您提供正确日期的时间平均值。
推荐阅读
- android - Android使用指定帐户意图打开谷歌驱动器
- java - 单击默认全屏按钮后,如何使 JFrame 全屏显示?
- javascript - 谷歌图表错误 - 给定轴上的所有系列必须是相同的数据类型×
- php - SilverStripe 4 - 将上传的文件保存为成员扩展属性
- c++ - C++ 中的研究案例。抽象类和实例
- swift - Currying func 并在 Swift 4 中保留参数名称/标签
- python - 通过用列表替换单元格值来扩展熊猫数据框
- spring - 推送到 GIT 时如何加密或保护密钥?
- node.js - 如何使用node js仅在设备温度大于25或小于19时发送一次警告消息
- r - 用 TukeyHSD 做部分数据