首先看乙個nc檔案中包含哪些部分,例如乙個標準的fvcom
輸入檔案wind.nc
:
netcdf wind
可以看出nc
檔案包含兩個主要部分:
dimensions
:各個變數維度大小
variables
:變數
在上面檔案中包含三個維度:nele
,node
,time
。其中nele
,node
兩個是固定長度的,而time
則是unlimited
,代表其為任意長度。
在variables
下,每個變數形式為
float uwind_speed(time, nele)
括號包含了變數的維度,每個維度變數指定了該變數某個維度的長度。
在netcdf
定義中陣列是按行排列,因此迴圈是由右至左。而在matlab
中,陣列則是按列排列,因此儲存的陣列會將各個維度順序交換,即uwind_speed(nele, time)
。
使用 matlab 的netcdf
工具箱生成檔案時需要按照以下順序:
定義檔案內維度與變數,包括
儲存變數
以生成乙個如上的wind.nc
檔案為例
首先定義檔案中維度:nele
,node
,time
。
注意time
長度是不固定的。
%% creat new netcdf file
ncid = netcdf.create('wind.nc','clobber');
% definition
ele_dim = netcdf.defdim(ncid,'nele', elenum);
node_dim = netcdf.defdim(ncid,'node', nodenum);
time_dim = netcdf.defdim(ncid,'time', netcdf.getconstant('nc_unlimited'));
定義維度之後便可根據維度定義變數。
注意,由於time
維度是不定長度的,因此其必須作為變數最後乙個維度(元素迴圈由左向右)
iint_var_id = netcdf.defvar(ncid,'init','int', time_dim);
time_var_id = netcdf.defvar(ncid,'time','float', time_dim);
u_var_id = netcdf.defvar(ncid,'uwind_speed','double',[ele_dim, time_dim]);
v_var_id = netcdf.defvar(ncid,'vwind_speed','double',[ele_dim, time_dim]);
% end definition
netcdf.enddef(ncid);
netcdf.close(ncid);
定義完變數之後便可向nc檔案中儲存資料了。
在這裡需要注意的是,由於matlab 呼叫c
語言的 netcdf函式庫,因此在其函式中陣列下標是由0開始。(詳見help netcdf
)
% write data
ncid = netcdf.open('wind.nc', 'write');
netcdf.putvar(ncid, time_var_id, 0, nstep, 1, time(1:nstep));
如上述**中,0
為起始序號,nstep
為資料總數,1
為儲存資料間隔,time
即使儲存在matlab中變數名。
採用相同方法將uwind_speed
與vwind_speed
迴圈儲存在檔案內。
for itime = 1:nstep
...netcdf.putvar(ncid, u_var_id, [0, itime-1], [elenum, 1], u_interp);
...netcdf.putvar(ncid, v_var_id, [0, itime-1], [elenum, 1], v_interp);
fprintf('processing: %f \n', itime/nstep);
end% for
在這裡,uwind_speed
與vwind_speed
是多維陣列,因此指定其起始位置也要採用乙個向量[0, itime-1]
(0
代表nele
維度起始序號;'itime-1' 則代表time
維度起始序號)。[elenum, 1]
為這次要儲存的資料占個維度個數,明顯我們要儲存一整個時間步的資料,所以長度分別為單元個數與時間步數1
。最後u_interp
與v_interp
則是變數名。
最終,我們來檢查下生成的nc檔案,使用matlab
版本為 r2014b,netcdf
版本號為4.1.3。
source:
/users/mac/documents/matlab/temp/forzhangna/fvcom_wind/wind.nc
format:
classic
dimensions:
nele = 21284
node = 10951
time = 3 (unlimited)
variables:
init
size: 3x1
dimensions: time
datatype: int32
time
size: 3x1
dimensions: time
datatype: single
uwind_speed
size: 21284x3
dimensions: nele,time
datatype: double
vwind_speed
size: 21284x3
dimensions: nele,time
datatype: double
MATLAB讀取 nc檔案
ncfilepath d 田晴1 esa cci 20141002 20160430active esacci soilmoisture l3s ssms active 20141002000000 fv04.4.nc 顯示結構 ncdisp ncfilepath 在命令列視窗中以文字形式顯示 ne...
MATLAB開啟nc檔案並讀取nc檔案資料
ncdisp e nc 輸入該命令後命令列視窗會顯示該nc檔案的基本資訊 根據上一步中nc檔案的基本資訊提取nc檔案的相應資料。time ncread e nc time 首先,將所需要的資料提取出來 start 125,89,123 count 17,14,124 tmax ncread e nc...
Nc單據製作單據步驟
nc50製作單據步驟 1 匯入資料字典 進入 客戶化 二次開發工具 系統管理工具 資料字典管理 選中資料字典,點新建,選擇新建資料夾,在 顯示名稱 後面輸入名稱 中文 選中剛新建的資料夾,點工具 匯入資料字典 下一步 點選擇按扭,選取要匯入的pdm檔案 下一步 在 匯入到選中目錄 前打鉤 下一步 完...