使用python平均多个netCDF4文件

2024-09-30 00:40:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有点像python noob中的netCDF,所以请原谅这个noob问题

我有一个文件夹,里面有大约3650个netCDF4文件。十年来每天一个文件。niles被命名为yyyymmdd.nc(例如201001012010010220100103等)。每个.nc文件都包含同一地区(汤加专属经济区的一部分)一次性点的纬度、经度和温度

我要做的是计算所有文件中每个lat和lon的平均温度,也就是说,我希望最终得到一个.nc文件,其中包含所有相同的lat和lon以及10年的平均温度

我尝试过不同的东西/版本的代码,通常,它们最终看起来像这样

files = glob('*.nc')
ds = xr.open_mfdataset(files,)
mean = np.mean(ds['temp'][:, 0].values)

。。。。。。该代码将为所有.nc文件提供一个.nc文件中的平均温度,而不是十年文件中基于lat和lon的平均温度

非常感谢所有的帮助

多谢各位


Tags: 文件代码文件夹dsnetcdffilesmean命名
2条回答

假设您正在linux/macOS上工作,那么可以使用我的nctoolkit包轻松完成这项工作(请参阅详细信息here

以下内容将计算所有文件的平均值,然后绘制结果:

import nctoolkit as nc
files = glob('*.nc')
ds = nc.open_data(file)
ds.ensemble_mean()
ds.plot()

默认情况下,nctoolkit使用CDO作为后端,但也可以使用NCO,这可以提高性能。因此,以下方法可能更快:

import nctoolkit as nc
files = glob('*.nc')
ds = nc.open_data(file)
ds.ensemble_mean(nco=True)
ds.plot()

您可以使用cdo包在输入文件名中使用通配符来实现这一点。不过,我只对少量文件进行了测试,有一个警告,您可能会在打开的文件数量上达到系统限制

from cdo import *
cdo=Cdo()
cdo.ensmean(input='*.nc',output='ensmean.nc')

这基本上相当于对cdo的命令行调用

cdo ensmean *.nc ensmean.nc 

也就是说,在我看来,最好将它们放在一起,然后使用timmean:

cdo.timmean(input=cdo.mergetime(input='*.nc'),output='timmean.nc')

python又是什么

cdo mergetime *.nc all.nc
cdo timmean all.nc timmean.nc 

两种方法都试一下,看看哪一种有效/最快:-)

相关问题 更多 >

    热门问题