mny 发表于 2013-4-23 20:47:57

将matlab的mat文件转成GMT可读的ascii格式

GMT主要僅負責繪圖工作,資料之分析通常是以其他程式完成,故將其他程式的輸出
轉成GMT可讀之資料檔也成為繪圖之重要一部分,目前matlab為常用之分析工具
此以matlab的專屬結構化檔案格式為例,轉為GMT可讀之格式
假設有一matlab的*.mat檔,其中紀錄了海表面異常資料
其內儲存的變數內容如下:
  Name             Size                      Bytes  Class     Attributes
  Lat            121x1                         968  double
  Lon            201x1                        1608  double
  jday_gmt      1371x1                       10968  double
  sla            121x201x1371            266752728  double
分別為緯度,經度,時間,與海表面高度異常值
Lat與Lon是一維矩陣,分別有121與201個元素
jday_gmt為一維矩陣,有1371個元素
sla為三維矩陣,大小是121x201x1371,分別對應緯度,經度與時間
假設我們要取出某時間點空間上的SLA變化,所以我們預期,要給GMT的格式檔為三行如下:

經度 緯度 海表面高度異常
 121  20   5.22
 121  21   3.21
 121  22   2.22
 ....
 ....
 122  20   1.11
 122  21   6.21
 ....
 ....

假設我們需要第100個時間點的sla時空資料,則第100個時間點的SLA為二維資料121x201
故,首要原則為,先讓Lon,Lat與sla的維度一致,皆為121x201,在降階為一維資料寫出到ascii
matlab程式範例如下:

lat=Lat*ones(1,201);    % 121x201
lon=ones(121,1)*Lon';   % 121x201
SLA=sla(:,:,100);       % 121x201
a=;    %降階成一維後3行並列
fid=fopen(ofn,'gmtascii.dat');     % 開啟檔案gmtascii.dat
fprintf(fid,'%8.2f %8.2f .4f\n',b);  % 寫入檔案
fclose(fid)
如此gmtascii.dat變成上述格式,可用GMT繪圖之

註: 後三行亦可用 save gmtascii.dat a -ascii 取代之,缺點是無法自訂資料格式
ps: save gmtascii.dat a -ascii 输出的数值格式采用科学计数(1.0000000e+000),在linux终端中运行 echo |awk '{printf "%g\n",$1}' test1.dat >test2.dat 命令可以将输出格式改为1。
页: [1]
查看完整版本: 将matlab的mat文件转成GMT可读的ascii格式