物探论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1095|回复: 0

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

[复制链接]
发表于 2013-4-23 20:47:57 | 显示全部楼层 |阅读模式
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=[reshape(lon,121*201,1)';reshape(lat,121*201,1)';reshape(SLA,121*201,1)'];    %降階成一維後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。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|物探论坛 ( 鄂ICP备12002012号 微信号:iwutan )

GMT+8, 2024-4-29 13:08 , Processed in 0.210562 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表