python - 如何从多个每日文件中获取运行平均值或移动平均值
问题描述
我有 11 年(2007 年到 2017 年)的每日温度档案。总共有11*365 = 4015
NetCDF 文件。每个文件包含纬度(100,)
、经度(360,)
维度和这些大小的温度变量(360, 100)
。我想在每个网格点找到 15 天的运行(移动)平均值,NaN
如果存在则忽略这些值。这意味着需要使用 15 个文件来找到平均值。我有以下功能可以从文件夹中读取所有日常文件。例如,需要找到files_list[0:15]
, files_list[1:16]
,的平均值。并且每个文件都意味着需要保存为一个新的 NetCDF 文件。我有一个创建 NetCDF 文件的想法。但找不到运行或移动平均线。files_list[2:17]....
files_list[4000:]
这是我的代码:
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问题:
推荐阅读
- julia - 如何在 Flux.jl 中向我的模型添加批量标准化层
- python - Pickle 加载变量.. 乱序?
- python - Python 无法找到我的模块,即使它存在
- c# - MySQL @Id 的问题不是随机定义的
- spring-boot - GCP 上的 Spring App - Cloud Run - 仅 HTTPS - 主机和端口的这种组合需要 TLS
- html - 如何像某些网站在 HTML 中那样在小框架中嵌入 URL?
- html - 如何在其宽度内适应 CSS flex 内容?
- vba - 在动态填充后在另一个(未绑定的)表单中显示一个表单
- ruby - 有没有一种干净的方法来删除常见的 ruby 对象初始化代码?
- vmware - 如何使用 Powershell 或 risk api 获取环境中的 Vcenter 服务器列表