【问题标题】:Computing the value range for a netcdf 3D variable计算 netcdf 3D 变量的值范围
【发布时间】:2013-12-04 07:07:04
【问题描述】:

我有大量代表每日数据快照的 netcdf 文件。我希望将这些连接到一个软件,该软件要求我将文件中变量的最大值和最小值添加到名单中。如何查询变量中存储的最大值和最小值?

我的变量是深度(这里是 ncdump 的摘录,用于了解该变量的大小) ...

dimensions:
    z = 40 ;
    lat = 224 ;
    lon = 198 ;
    time = 1 ;
variables:
    float depth(z, lat, lon) ;
        depth:long_name = "cell centre depth" ;
        depth:units = "m" ;
...

我仍然是处理这些文件的初学者,并且迄今为止一直在使用 NCO 运算符和/或 matlab 来处理 netcdf - 有没有一种简单的方法可以使用这些工具中的任何一个来执行这个 max min 查询?

在此之前,我有 netcdfs,其中值范围有助于在属性中显示,或者它已经足够少量的数据可以通过简单的 ncdump -v 查看值或将变量存储在 matlab 中轻松显示自动显示最大最小值,但现在我有太多值无法使用这些快速而肮脏的方法。

我们非常欢迎任何帮助。 一切顺利, 贝克斯

【问题讨论】:

    标签: matlab netcdf nco


    【解决方案1】:

    一种 NCO 方法是使用 ncrng 命令,它只是较长 ncap2 命令的“过滤器”: zender@roulee:~/nco/data$ ncrng three_dmn_rec_var in.nc 1.000000 to 80.000000 所以,这是一个三字命令。关于过滤器的文档是here

    【讨论】:

      【解决方案2】:

      如果您有更新版本的 MATLAB,请尝试使用 ncread 函数。

      % Update with your filename and variable name below.
      % This reads in the full variable into MATLAB
      variableData = ncread(filename,varname);
      % Query max and min values
      minValue     = min(variableData(:))
      maxValue     = max(variableData(:))
      % you could also write this information back to the file for future reference.
      % see https://www.unidata.ucar.edu/software/netcdf/docs/netcdf/Attribute-Conventions.html
      ncwriteatt(filename, varname, 'valid_range', [minValue, maxValue]);
      % check result
      ncdisp(filename, varname);
      

      您可以在外部添加两个额外的循环,一个用于循环遍历所有文件,另一个用于循环遍历文件中的所有变量(查看 ncinfo)以使整个过程自动化。

      【讨论】:

      • 谢谢Ashish,这已经成功了,我自己没有想到这一点感到有点愚蠢,我可能过度思考了变量注册为太多值并假设我不能的事实不要这样查询。未来的注意事项 - 试试吧!感谢您的帮助!
      【解决方案3】:

      CDO 方法是

      cdo vertmax -fldmax in.nc max.nc
      cdo vertmin -fldmin in.nc min.nc
      

      优点是您可以在 x-y 空间 (fldmax/fldmin)、垂直 (vertmax/min) 或随时间 (timmax/min) 或三者的组合上计算最小/最大值。

      要将 netcdf 中的值转储到 ascii,您可以使用 ncks

      ncks -s '%13.9f\n' -C -H  -v depth max.nc
      

      因此,要构建一个名单,例如,您可以编写

      echo min=`ncks -s '%13.9f\n' -C -H  -v depth min.nc` >> namelist.txt
      echo max=`ncks -s '%13.9f\n' -C -H  -v depth max.nc` >> namelist.txt
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多