• [转载]将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。

  • 相关阅读:
    kubernetes(十九) Ceph存储入门
    Kubernetes 使用 Weave Scope 监控集群(十七)
    在Mac下安装Wordpress
    关闭 Mac 上的虚拟内存
    Underlay、Overlay、大二层介绍
    Docker For Mac 下安装 Rancher
    Minikube-Kubernetes本地环境进行开发
    minikube---kubectl常用命令
    Mac安装minikube
    java内存模型
  • 原文地址:https://www.cnblogs.com/gisalameda/p/12840537.html
Copyright © 2020-2023  润新知