gpt4 book ai didi

python - 如何从多个每日文件中获取运行或移动平均值

转载 作者:行者123 更新时间:2023-11-30 21:57:05 24 4
gpt4 key购买 nike

我有11年(2007年至2017年)的每日温度文件。总共有 11*365 = 4015 NetCDF 文件。每个文件包含纬度 (100,)、经度 (360,) 维度以及大小为 (360, 100) 的温度变量。我想找到每个网格点的 15 天运行(移动)平均值,忽略 NaN 值(如果存在)。这意味着需要使用 15 个文件来查找平均值。我有以下函数可以从文件夹中读取所有日常文件。例如files_list[0:15]files_list[1:16]files_list[2:17].... 的平均值需要找到>files_list[4000:]。每个文件都意味着需要保存为新的 NetCDF 文件。我有一个创建 NetCDF 文件的想法。但找不到运行或移动平均线。

这是我的代码:

def files_list (working_dir, extension):
'''
input = working directory and extension of file(eg. *.nc)
outout = returns the list of files in the folder
'''
file_full_path = os.path.join(working_dir)
os.chdir(working_dir)
files = glob.glob(os.path.join(file_full_path,extension))
files = natsort.natsorted(files)
files_list= [] #Empty lsit of files
j = 0
for j in range(0,len(files)):
files_list.append(os.path.basename(files[j])) #appending each files in a directory to file list
return files_list

最佳答案

这不是 python 中的解决方案,但如果您的文件名为 file_20061105.nc 等,您可以从命令行将它们与 cdo(气候数据运算符)合并,然后使用 runmean 函数

cdo mergetime file_*.nc merged_file.nc
cdo runmean,15 merged_file.nc runmean.nc

在某些系统上,您可以打开的文件数量有限制,在这种情况下,您可能需要首先一次合并文件一年

for year in {2007..2017} ; do 
cdo mergetime file_${year}????.nc merged_${year}.nc
done
cdo mergetime merged_????.nc merged_file.nc
cdo runmean,15 merged_file.nc runmean.nc

只是作为从命令行快速执行此操作的另一种方法。

如果你想在 python 程序中执行此任务,那么你可以首先以这种方式将文件合并为一个文件(或者在 python 中循环文件并将它们读入单个 100x360x4000 的 numpy 数组),然后在 python 中执行运行平均值,这里已经有一个有关此任务的 stackoverflow 问题:

Moving average or running mean

关于python - 如何从多个每日文件中获取运行或移动平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55370370/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com