Min*_*iếu 2 weather netcdf nco cdo-climate
如何使用存储在 netcdf 文件中的数据从时间序列中删除季节性数据?我想找到一个使用 Linux 的解决方案,同时我使用 Grads 和 Ferret 进行可视化。
多谢!
您可以使用 CDO 计算一年中每天/每月的平均值并从原始文件中减去:
如果文件包含每日数据:
cdo ydaysub in.nc -ydaymean in.nc deseasonalized.nc
Run Code Online (Sandbox Code Playgroud)
同样,如果数据是每月的:
cdo ymonsub in.nc -ymonmean in.nc deseasonalized.nc
Run Code Online (Sandbox Code Playgroud)
ydaymean 和 ymonmean 命令计算 in.nc 数据集的年度周期,即 ymonmean 返回 12 个时间片,即所有 1 月、2 月等的平均值,然后使用 sub 从原始文件中减去。我使用了管道,但在两条单独的行上可能更容易理解:
cdo ymonmean in.nc annual_cycle.nc
cdo ymonsub in.nc annual_cycle.nc deseasonalized.nc
Run Code Online (Sandbox Code Playgroud)
这完全一样,deseasonalized.nc将是相同的(几乎,由于 netcdf 全局元数据标头中的“历史记录”日志不同,会有一些字节差异),但您还将有一个带有 Annual_cycle 的新文件.nc在里面(可能也有用?)。
为什么使用ymonsuborydaysub代替sub?毕竟,在进行减法时,CDO 检测到要减去的第二个文件中的时间片数较小,因此循环遍历它。事实上有两个原因。
关于每月时间尺度的开始日期的安全性:由于季节性周期是根据与原始数据相同的文件计算的,因此简单地使用可能没问题sub,因为如果数据从四月开始,那么结果ymonmean也将从四月开始。但是,如果您想删除从不同来源计算的季节性周期,开始日期/月份可能会有所不同,并且您最终会从一月中减去四月平均值!为了避免这种情况,您可以改用该ymonsub命令。
如果使用每日数据,则闰年:如果您使用每日时间刻度,那么您肯定需要使用ydaysub,因为仅使用 sub 会忽略闰年。您的平均季节性周期文件中有 366 个时间片,因为它也有 2 月 29 日。如果您只使用sub,您每年平均会以 0.75 天的速度不同步!因此,如果您的系列涵盖 40 年,那么到系列结束时您将落后一个月(哎呀!)
后记:现在 R 和 python 中也有软件包,允许您从这些语言中访问 cdo 的完整功能,而不必求助于使用 shell 访问工具。
编辑 2021:我现在有一个关于这个主题的视频,您可以在此处观看https://youtu.be/jKlA1ouoQIs
| 归档时间: |
|
| 查看次数: |
2408 次 |
| 最近记录: |