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


    reprinted from http://140.121.165.30/class/GMT/
    
    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 .4fn',b);  % 寫入檔案
    fclose(fid)

    如此gmtascii.dat變成上述格式,可用GMT繪圖之

    註: 後三行亦可用 save gmtascii.dat a -ascii 取代之,缺點是無法自訂資料格式

    ps: save gmtascii.dat a -ascii 输出的数值格式采用科学计数(1.0000000e+000),在linux终端中运行 echo |awk '{printf "%gn",$1}' test1.dat >test2.dat 命令可以将输出格式改为1。

  • 相关阅读:
    git常用指令 github版本回退 reset
    三门问题 概率论
    如何高效的学习高等数学
    数据库6 关系代数(relational algebra) 函数依赖(functional dependency)
    数据库5 索引 动态哈希(Dynamic Hashing)
    数据库4 3层结构(Three Level Architecture) DBA DML DDL DCL DQL
    梦想开始的地方
    java String字符串转对象实体类
    java 生成图片验证码
    java 对象之间相同属性进行赋值
  • 原文地址:https://www.cnblogs.com/gisalameda/p/12840538.html
Copyright © 2020-2023  润新知