计算netcdf 3D变量的值范围

时间:2013-11-20 10:30:53

标签: matlab netcdf nco

我有一大堆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处理 - 是否有一种简单的方法可以使用这些工具执行此最大最小查询?

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

任何帮助都很受欢迎。 祝一切顺利, BEX

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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)以自动完成整个过程。

答案 2 :(得分:0)

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