[英]Averaging multiple netCDF4 files with python
我在 python 菜鳥中有點 netCDF 所以請原諒這個菜鳥問題。
我有一個文件夾,里面裝滿了大約 3650 個 netCDF4 文件。 每天一個文件,持續十年。 尼羅河被命名為 yyyymmdd.nc(例如 20100101,20100102,20100103 等)。 每個.nc 文件都包含同一區域(湯加專屬經濟區的一部分)的某個時間點的緯度、經度和溫度。
我想要做的是從所有文件中計算每個緯度和經度的平均溫度,即我想最終得到一個具有相同緯度和經度以及 10 年平均溫度的文件。
我嘗試過不同的東西/版本的代碼,通常,它們最終看起來像這樣......
files = glob('*.nc')
ds = xr.open_mfdataset(files,)
mean = np.mean(ds['temp'][:, 0].values)
......此代碼將為我提供所有.nc 文件的 a.nc 文件中的平均溫度,而不是基於 lat 和 lon 的十年文件中的平均溫度。
非常感謝所有和任何幫助。
謝謝你。
假設您正在使用 linux/macOS,這可以使用我的 nctoolkit 包輕松完成(請參閱此處的詳細信息)。
下面將計算所有文件的平均值,然后計算 plot 結果:
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 package 在輸入文件名中使用通配符來執行此操作。 不過,我只用少量文件對其進行了測試,但需要注意的是,您可能會達到系統打開文件數量的限制。
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
嘗試兩者,看看哪個有效/最快:-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.