【问题标题】:Read large netcdf data by ncl通过 ncl 读取大型 netcdf 数据
【发布时间】:2017-06-13 13:41:14
【问题描述】:

我正在读取 ncl 的大型 wrfout 数据(空间约 100x100,垂直 30,时间 400)。

fid=addfile("wrfout_d03.nc","r")
u=fid->U

变量U大概500M左右,所以耗时比较多,还需要读取其他变量。ncl有什么办法可以快速读取大的netcdf数据?或者我可以使用其他语言吗?

【问题讨论】:

  • 一个好的起点是预先压缩文件(例如使用 CDO 或 NCO)。读取中最慢的部分通常是磁盘访问,因此即使 CPU 必须进行解压缩,将其减少到最低速度也会加快速度。如果精度损失可以接受,另一种选择是将变量减少为更小的类型,例如将降水量(毫米/天)转换为无符号整数。如果您可以/想要一次仅读取文件的一部分(例如时间序列或垂直配置文件),您可以了解分块,这对 NeCDF 读取时间有巨大影响,如果压缩则影响更大。
  • "一个很好的起点是压缩...*;请参阅我对 Adrian 回答的评论。我用 Python 尝试过,它似乎是(至少用 Python)非常慢。我个人也会从选择您实际需要分析的数据开始。如果那是完整的 3D 字段 + 所有时间步长,那么我想您必须忍受很长的加载时间,除非您想做一些花哨的事情比如并行读取和后处理。

标签: netcdf ncl


【解决方案1】:

在将它们读入 NCL 之前提取所需的变量和时间片可能更有帮助。

按变量选择:

cdo selvar,var in.nc out.nc

按级别选择:

cdo sellevel 

或按其索引选择的级别:

cdo sellevidx

您还可以根据日期或时间提取子集...

更多信息在这里: https://code.mpimet.mpg.de/projects/cdo/wiki/Cdo#Documentation

【讨论】:

  • 我对这种压缩方式很好奇,所以我很快用我们模型中的 576 MB 大 netCDF 文件进行了尝试。压缩(使用您的命令)将其减少到 472MB,但是当我在 Python 中将它们都读入内存时,读取压缩后的内存需要 8(!)倍,我猜是因为在 Python 中解压缩它需要时间。
  • 好点,它占用的磁盘空间更少,但访问时间会更长,一个很好的折衷方案是 zip5 或 6。但由于你的问题只是关于访问时间,实际上我决定删除那部分答案。
  • 这不是我的问题,我只是好奇:)
猜你喜欢
  • 1970-01-01
  • 2016-03-04
  • 2018-01-16
  • 2016-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-15
相关资源
最近更新 更多