我有一大堆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
答案 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