我有一个netCDF文件,记录了过去22000年的十年平均值(TraCE数据集)。我想计算100年或1000年的平均值。
我真的卡住了,如果有人能帮我,那就太好了。我主要使用R
,但如果它在cdo
中很简单,那么我也可以尝试一下。
我没有任何代码要展示,因为我真的不知道从哪里开始。我见过的大多数例子都是每天或每年的数据……没有十年
您的数据是十年平均值,因此在CDO中应该很容易做到这一点。你想要计算一个滚动平均值,它是每10个时间步长的平均值。因为runmean
是你的朋友。只需执行以下操作:
cdo runmean,10 infile.nc outfile.nc
您可能需要之后的子集时间,这取决于您想要的确切输出。听起来你的时间可能是不标准的,但runmean应该仍然是可以的。
如果您想要100年或1000年时间尺度上的平滑输出,Robert的解决方案是有用的。您的原始数据集有2200个时间步,runmean,10
对其进行平滑处理,并产生2200-9=2191个时间步的输出,每个时间步都是100年窗口的平均值,要么以片本身为中心,要么滞后/领先,具体取决于所使用的选项。
然而,从你的问题来看,我认为你更可能想要一个输出,其中第一个片是第一个世纪的平均值,第二个是第二个世纪的平均值,以此类推,也就是说,输出220个时间片,每个时间片一个世纪的平均值(或22个时间片1000年平均值)。换句话说,您想要一个类似于daymean
、monmean
和yearmean
的命令,但是由于没有称为centurymean
的命令,那么您可以使用更通用的命令timselmean
,并手动定义窗口长度:
# Centurial average:
cdo timselmean,10 infile.nc outfile.nc
# Millennial Average:
cdo timselmean,100 infile.nc outfile.nc
我认为这应该仍然工作,尽管你在评论中提到的非cf兼容的时间单位(但请告诉我们,如果它不)