2013-11-20 65 views
0

我有一大組netcdf文件代表數據的每日快照。我希望將這些內容掛接到一個軟件,該軟件要求我在文件列表中添加文件中變量的最大值和最小值。如何查詢存儲在變量中的最大值和最小值?計算netcdf 3D變量的值範圍

我的變量是深度(這裏是從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中它會自動顯示最大最小值,但現在我有太多的值來使用這些快速和骯髒的方法。

任何幫助很好地收到。 全部都是最好的, Bex

回答

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)自動化整個事情。

+0

謝謝阿希什,這做的伎倆,我覺得自己沒有想到這個問題有點愚蠢,我可能認爲事實上這個變量被註冊爲太多的值,並且認爲我無法以這種方式進行查詢。注意未來 - 試試吧!謝謝你的幫助! – BexERoss

1

一層NCO的方法是使用ncrng命令,這是一個簡單的「過濾器」較長ncap2命令: [email protected]:~/nco/data$ ncrng three_dmn_rec_var in.nc 1.000000 to 80.000000 所以,這是一個三個字的命令。有關過濾器的文檔是here

0

該CDO方法將是

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

的優點是,就可以計算出最小/最大剛剛超過XY空間(fldmax/fldmin),垂直(vertmax /分鐘)或隨時間(timmax /分鐘) ,或三者的組合。

要從創建NetCDF轉儲值ASCII可以使用NCK上

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