簡體   English   中英

使用 python 平均多個 netCDF4 文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM