合并大量netCDF文件

2024-01-01

我有一个包含 netCDF (.nc) 文件的大文件夹,每个文件都具有相似的名称。数据文件包含时间、经度、纬度和月降水量的变量。目标是获取 X 年内每个月的平均月降水量。所以最后我会得到 12 个值,代表 X 年内每个纬度和经度的平均月降水量。多年来,每个文件都位于同一位置。 每个文件都以相同的名称开头并以“date.sub.nc”结尾,例如:

'data1.somthing.somthing1.avg_2d_Ind_Nx.200109.SUB.nc'
'data1.somthing.somthing1.avg_2d_Ind_Nx.200509.SUB.nc'
'data2.somthing.somthing1.avg_2d_Ind_Nx.201104.SUB.nc'
'data2.somthing.somthing1.avg_2d_Ind_Nx.201004.SUB.nc'
'data2.somthing.somthing1.avg_2d_Ind_Nx.201003.SUB.nc'
'data2.somthing.somthing1.avg_2d_Ind_Nx.201103.SUB.nc'
'data1.somthing.somthing1.avg_2d_Ind_Nx.201203.SUB.nc'

结局是 YearMonth.SUB.nc 到目前为止我所拥有的是:

array=[]
f = nc.MFDataset('data*.nc')
precp = f.variables['prectot']
time = f.variables['time']
array = f.variables['time','longitude','latitude','prectot'] 

我收到一个 KeyError:('时间','经度','纬度','prectot')。有没有办法结合所有这些数据,以便我能够操纵它?


正如@CharlieZender 提到的,ncra是这里的方法,我将提供有关将该函数集成到 Python 脚本中的更多详细信息。 (PS - 您可以使用 Homebrew 轻松安装 NCO,例如http://alejandrosoto.net/blog/2014/01/22/setting-up-my-mac-for-scientific-research/ http://alejandrosoto.net/blog/2014/01/22/setting-up-my-mac-for-scientific-research/)

import subprocess
import netCDF4
import glob
import numpy as np

for month in range(1,13):
    # Gather all the files for this month
    month_files = glob.glob('/path/to/files/*{0:0>2d}.SUB.nc'.format(month))


    # Using NCO functions ---------------
    avg_file = './precip_avg_{0:0>2d}.nc'.format(month)

    # Concatenate the files using ncrcat
    subprocess.call(['ncrcat'] + month_files + ['-O', avg_file])

    # Take the time (record) average using ncra 
    subprocess.call(['ncra', avg_file, '-O', avg_file])

    # Read in the monthly precip climatology file and do whatever now
    ncfile = netCDF4.Dataset(avg_file, 'r')
    pr = ncfile.variables['prectot'][:,:,:]
    ....

    # Using only Python -------------
    # Initialize an array to store monthly-mean precip for all years
    # let's presume we know the lat and lon dimensions (nlat, nlon)
    nyears = len(month_files)
    pr_arr = np.zeros([nyears,nlat,nlon], dtype='f4')

    # Populate pr_arr with each file's monthly-mean precip
    for idx, filename in enumerate(month_files):
        ncfile = netCDF4.Dataset(filename, 'r')
        pr = ncfile.variable['prectot'][:,:,:]  
        pr_arr[idx,:,:] = np.mean(pr, axis=0)
        ncfile.close()

    # Take the average along all years for a monthly climatology
    pr_clim = np.mean(pr_arr, axis=0)  # 2D now [lat,lon]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

合并大量netCDF文件 的相关文章

随机推荐

  • 错误:捕获异常 [错误:不支持的命令 [addSelection |]

    我正在使用带有 C 的 selenium Web 驱动程序 并在尝试选择可用列表上的项目时收到错误如下 错误 捕获异常 错误 不支持的命令 addSelection 有人可以帮我弄这个吗 有什么解决办法吗 我正在尝试从左侧的列表中选择一个项
  • 将 SQL 查询转换为 django 查询

    我正在尝试将 sql 查询转换为 django 查询 但未能做到这一点 任何人都可以帮助我 select id name round value numeric 2 as value st transform geometry 3857 a
  • 被逐出的对象仍然会向 Hibernate 中的数据库发出更新

    我有一个问题 我驱逐一个实体 但对其进行的更改仍然会更改数据库 这是我的 DAO 中方法的一部分 Entity public class Profile Id GeneratedValue private Long id OneToMany
  • C++ getter 中的 const [重复]

    这个问题在这里已经有答案了 我仍在学习 C 并且我正在阅读所有我必须使用的内容const尽我所能 我认为是出于速度原因 我通常这样写 getter 方法 const bool isReady return ready 但我看到一些IDEA以
  • Linux C 原始套接字 TCP 握手

    我正在尝试使用 C 中的原始套接字 在 Debian 系统上 创建 TCP 连接 但我很难让它工作 它会发送一个数据包 但我没有从服务器得到任何响应 我已经测试并比较了该数据包与从 nmap 发送的数据包 我看不到任何重大差异 这是服务器端
  • jquery ui datepicker 在 beforeShowDay 出现错误

    我正在尝试使用 jquery ui 的日期选择器来实现事件日历 我已经成功安装了日期选择器并且它显示并工作 当我尝试注册时出现问题beforeShowDay处理程序 像这样 datePicker datepicker beforeShowD
  • 序列不包含匹配元素

    我有一个 ASP NET 应用程序 其中使用 linq 进行数据操作 运行时 我收到异常 序列不包含匹配元素 if lstAcl Documents Count gt 0 for i 0 i lt lstAcl Documents Coun
  • Cordova 插件,用于使用 URL 模式从浏览器启动应用程序

    我们可以从 iOS 和 Android 中的浏览器启动应用程序 它是使用 URL 模式实现的 想知道是否有任何 Cordova 插件可以处理上述情况 你有没有尝试过LaunchMyApp PhoneGap 插件 https github c
  • 包装对 malloc()/realloc() 的调用...这是一个好主意吗?

    对于分配 我需要分配一个动态缓冲区 使用malloc 对于初始缓冲区和realloc 如果需要扩大该缓冲区 在我使用 re m alloc 的任何地方 代码如下所示 char buffer malloc size if buffer NUL
  • 防止两个连接共享同一个锚点

    我正在使用 jsPlumb 来允许用户构建图表 我允许用户拖动这些元素 因此我为每个端点使用锚点集合 让 jsPlumb 在建立连接时从该集合中为我选择 最佳 锚点 我遇到的问题是 我可能有来自任何给定端点的多达十几个连接 因此当许多人最终
  • SWI-Prolog 中的 catch/3 和 call_with_time_limit/2 谓词

    我想用 catch Goal Catcher Recover 目标在哪里 call with time limit Time Goal 它很混乱 我找不到正确的方法来知道上述情况之一何时发生 1 进球因超时而停止 2 目标失败 有时应该会失
  • 如何使用 React Router 将 div 放入 Switch 中?

    我有一个使用 React 和 Redux 的 APP 我想加载一个NotFound当用户输入无效路线时的组件 我在网上找到了解决这个问题的方法 那就是将所有路由放在一个交换机中 包括NotFound成分 问题是 在我的应用程序中 我无法将所
  • 使用 .NET 4.5 async、await 将 Azure blob 异步下载到字符串

    我正在尝试实施一个完全异步使用 NET 4 5 异步和等待进行 blob 下载 假设整个 blob 可以一次放入内存中 并且我们希望将其保存在string Code public async Task
  • 来自 Xib 的 Cell 与 Swift 3

    我已经阅读并看过一些有关此主题的视频 但我无法让它发挥作用 我正在尝试使用 xib 中的单元格而不是故事板 这是我的 ViewController 其中有表视图 import UIKit class ViewController UIVie
  • panelgrid 内的复合组件未“扩展”

    基本上 我一直在 panelgrid 中一次又一次地使用这种模式
  • 如果我在 Python 脚本运行时修改它会发生什么?

    想象一下 一个Python脚本需要很长时间才能运行 如果我在它运行时修改它会发生什么 结果会不同吗 没什么 因为 Python 将你的脚本预编译成 PYC 文件并启动它 但是 如果发生某种异常 您可能会得到一个稍微误导性的解释 因为行X可能
  • PHP:我如何知道函数的调用者?

    我如何知道 php 中函数的调用者 不知道为什么你会关心这个 但你可以从debug backtrace http php net debug backtrace功能
  • 调整窗口大小时自动调整文本大小(字体大小)?

    我一直在尝试 徒劳地 构建一个页面 其元素会随着我更改窗口大小而调整大小 我让它在图像的 CSS 中工作没有问题 但我似乎无法在文本中完成同样的工作 而且我不确定它在 CSS 中是否可能 我似乎找不到一个 jquery 脚本来完成这个任务
  • Chrome 教程 - 选项页面

    我正在开发我的第一个 chrome 扩展 我关注了这篇文章http code google com chrome extensions options html http code google com chrome extensions
  • 合并大量netCDF文件

    我有一个包含 netCDF nc 文件的大文件夹 每个文件都具有相似的名称 数据文件包含时间 经度 纬度和月降水量的变量 目标是获取 X 年内每个月的平均月降水量 所以最后我会得到 12 个值 代表 X 年内每个纬度和经度的平均月降水量 多