0

我有大量代表每日数据快照的 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 中轻松显示max min,但现在我有太多的值无法使用这些快速而肮脏的方法。

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

4

3 回答 3

1

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

于 2015-03-10T12:01:41.997 回答
0

如果您有更新版本的 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)以自动化整个过程。

于 2013-11-20T13:00:26.717 回答
0

CDO 方法是

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

优点是您可以在 xy 空间 (fldmax/fldmin)、垂直 (vertmax/min) 或随时间 (timmax/min) 或三者的组合上计算 min/max。

要将值从 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
于 2017-05-25T15:57:21.187 回答