Julia程式語言:地球物理研究的新選擇

2021-02-09 地學新視野

敬請關注《地學新視野》

一、Julia程式語言簡介

Julia是一種新的程式語言,一種函數式程式語言,一種面向科學技術計算的高性能動態高級程序設計語言。Julia程式語言具有通用、動態、快速、開源、易於使用等特點。

Julia程式語言設計項目大約開始於2009年中,由麻省理工學院(MIT)計算機科學與人工智慧實驗室(CSAIL)研發和發布,Julia語言的主要創造者包括Viral Shah博士、Alan Edelman教授、Jeff Bezanson博士和Stefan Karpinski。2012年MIT發布了Julia的第一個版本(0.1版),目前的最新版本是1.1版。近年來,Julia 語言成為全球熱度上升最快的程式語言之一,截止2019年2月27日下載量已超過 400 萬次,下載者包括谷歌、Facebook、FAA 和美國能源部等部門的開發者,Julia社區已經註冊了數千個軟體包。Julia開發環境已經支持Windows、MacOS 、Linux、FreeBSD等多種作業系統平臺。

從Julia官網上可以看到Julia已經在諸多行業獲得應用,下面列出了若干個典型應用:

   (1)Racefox公司用Julia語言開展機器學習研究,對運動圖像進行數位化分析和訓練指導。

   (2)普林斯頓大學用Julia語言開展機器學研究與建模。

   (3)Laketide公司用Julia語言開展人工智慧與機器學習研究,開展產品開發。

   (4)Riken公司用BioJulia軟體寶開展RNA測序研究,開發了一種新的單細胞RNA測序方法。

   (5)巴西國家空間研究所用Julia開展空間發射規劃。

   (6)歐洲最大的保險公司之一Aviva用Julia進行償付能力和合規性分析。

   (7)美國國家能源研究科學計算中心(NERSC)研究人員用Julia在超級計算機上進行空間圖像分析,可在15分鐘對1.88億個天文對象編目,速度提高1000倍。

   (8)Fugro Roames用Julia進行機器學習,識別電網系統網絡故障或潛在故障,速度提高100倍。

   (9)美國聯邦航空管理局正在用Julia開發下一代空間碰撞防範系統。

   (10)Now-Casting Economics公司用Julia進行宏觀經濟建模,建模周期從數周縮短到數天。

   (11)MIT用Julia進行機器人研究,解決上樓梯、危險環境、複雜地形清淨下的行走問題。

   (12)AOT能源用Julia進行期權價格分析、線性規劃和市場模擬。

   (13)加州大學伯克利分校在自動駕駛項目中用Julia進行預測控制優化建模。

   (14)英國癌症研究者用Julia進行腫瘤生長建模和癌症基因告知解釋研究。

我們在上一篇文章(《Julia:一種新的科學計算程式語言》)中已經詳細介紹了Julia程式語言的特點和主要應用領域,本文將介紹Julia語言在地球物理研究中的應用情況。

二、地球物理研究採用Julia程式語言的理由

長期以來,在地球物理勘探產品研發中廣泛採用的是C/C++、Java等程式語言,而地球物理研究特別是高等學校的師生們中廣泛採用的是Matlab、Fortran和C語言。

Julia語言作為一種新的程式語言,能否在地球物理研究中取得好的應用呢?或者說為什麼我們要將其應用於地球物理研究中呢?我想理由有三:

(一)易於獲得和使用

Julia語言開發工具是開源、免費的,可以很方便地從網絡上下載、安裝部署,支持Windows、MacOS 、Linux、FreeBSD等多種作業系統環境,這對於一般研究者來說很重要。

具有Matlab、R、Python等語言編程經驗的研究者可以快速遷移到Julia語言編程。

(二)具有適合地球物理研究所需要的豐富的數據處理功能

Julia程式語言的設計從根本上講非常擅長數值計算和科學計算,內置了豐富的線性代數計算函數,提供了連接R、Python、Java和C等其它語言的程序接口,而且具有豐富的擴展軟體包可供選擇使用。

目前已經有用Julia語言編寫的大量科學計算工具,這些工具正是地球物理研究工作中不可缺少的,例如:

通用編程:DataStructures,LightGraphs

般數學運算:Calculus,DataFrames,StatsBase,Distributions,HypothesisTests,GLM

微分方程生態系統:DifferntialEquations.jl

最優化工具:JuMP.jl,Optim.jl,Roots

迭代線性求解器:IterativeSolvers.jl

資料庫連接:ODBC,JDBC

用戶界面構建與可視化:Gadfly,PyPlot,Interact

機器學習與深度學習:Knet,Clustering,DecisionTree

文件與數據格式處理:JSON,HDFS,JLD

與其它語言的互操作:RCall,JavaCall,PyCall

活躍的Julia生態系統中有一群來自科學界各個領域熱情的開發者和維護者,這個生態系統將持續變得越來越大,這為地球物理研究提供了豐富的共享代碼資源。

(三)計算性能卓越且支持並行計算

Julia語言具有極其卓越的計算性能,甚至能接近包括C語言在內的靜態編譯語言,而地球物理研究中對計算性能有較高的要求,而Matlab等常常不能滿足要求。

Julia專為並行性而設計,並為各個級別的並行計算提供內置基元:指令級並行,多線程和分布式計算,這樣為地球物理研究提供了極大的便利性。

Julia編譯器還可以為各種硬體加速器生成本機代碼,例如GPU和Xeon Phi。諸如DistributedArrays.jl和Dagger.jl之類的軟體包為並行性提供了更高級別的抽象。

三、基於Julia語言的地球物理擴展軟體包

據筆者的初步調研(基於Julia語言擴展軟體包網站pkg.julialang.org和開源軟體管理網站GitHub查詢),基於Julia程式語言開發的地球物理擴展軟體包主要包括以下幾種:

(1)SeismicJulia軟體包

SeismicJulia軟體包由加拿大阿爾伯塔大學的信號分析與成像研究組(SAIG,其主頁地址為http://saig.physics.ualberta.ca)貢獻,是一組基於Julia用於讀、寫及處理地震數據的工具,具體內容下一節再重點詳加介紹。

代碼下載地址:https://github.com/SeismicJulia/Seismic.jl。

(2)TeaSeis軟體包

這是雪佛龍能源技術公司開發的JavaSeis地震數據文件IO的Julia語言實現,主要用於讀寫JavaSeis格式的地震數據文件,這種數據文件格式應用於多個地震軟體項目中,如Landmark公司的SeisSpace。

代碼下載地址:https://github.com/ChevronETC/TeaSeis.jl。

(3)SeisPlot軟體包

這是一個地震道繪圖擴展軟體包,也是由加拿大阿爾伯塔大學的信號分析與成像研究組開發。

代碼下載地址:https://github.com/SeismicJulia/SeisPlot.jl。

(4)Seis、SAC、SACPlot軟體包

利茲大學地球與環境學院的Andy Nowacki用Julia語言開發了一組地震數據處理軟體包,其中Seis是一個地震信號分析框架,SAC是一個SAC格式地震數據處理軟體包,SACPlot是一個SAC格式數據文件地震道繪圖擴展軟體包,與SAC軟體包配套使用。

代碼下載地址:https://github.com/anowacki/Seis.jl,

https://github.com/anowacki/SAC.jl,

https://github.com/anowacki/SACPlot.jl。

(5)JuMIT和SeismicBSS軟體包

MIT的Pawan Bharadwaj開發了JuMIT和SeismicBSS兩個Julia擴展軟體包。JuMIT是一個地震波場模擬與反演工具包,其中包含了豐富地震波場正演模擬和反演模塊,值得研究和借鑑;SeismicBSS是一個盲源地震信號分離處理擴展軟體包。

代碼下載地址:https://github.com/pawbz/JuMIT.jl,

和https://github.com/pawbz/SeismicBSS.jl。

(6)GroundMotion軟體包

這是一個天然地震研究中的地面震動評估擴展軟體包,由俄羅斯地球物理技術公司(主頁:https://geophystech.ru)的Roman和Andrey Stepnov開發。

代碼下載地址:https://github.com/geophystech/GroundMotion.jl。

(7)SeisIO軟體包

有兩個SeisIO軟體包,一個是美國喬治亞理工大學SLIM(地震成像與模擬實驗室)研究組(主頁:https://slim.gatech.edu)開發的,主要功能是SEGY地震數據的讀寫,支持多文件的並行掃描;另一個是Joshua Jones個人開發的,主要功能包括SAC和(SeisIO)本地格式等多種格式地震數據的讀寫、時間同步、數據合併、補邊和基本處理。

代碼下載地址:https://github.com/slimgroup/SeisIO.jl,

和https://github.com/jpjones76/SeisIO.jl。

(8)PlotSeis軟體包

開發了SeisIO軟體包的Joshua Jones,還開發了一個支持SeisIO.jl的地震數據可視化工具軟體包PlotSeis,但這個軟體包2017年後未見更新。

代碼下載地址:https://github.com/jpjones76/PlotSeis.jl。

四、Seismic地震數據處理擴展軟體包介紹

 SAIG研究成員

加拿大阿爾伯塔大學信號分析與成像研究組(SAIG)的Aaron Stanton、Mauricio D. Sacchi和Nasser Kazemi於2016年在維也納召開的EAGE開源軟體研討會上以「用Julia語言開展高效的地球物理研究(Efficient Geophysical Research in Julia)」為題報告了他們的研究成果。他們開發了一組用於地震數據讀寫和處理的Julia軟體包,工具包總的名稱為SeismicJulia,訪問地址為https://github.com/SeismicJulia/,其中包含了多個Julia軟體包:

SeisMain.jl:SeismicJulia主軟體包

SeisAcoustic.jl:聲波模擬與成像軟體包

SeisProcessing.jl:地震數據處理工具

SeisImaging.jl:地震成像工具

SeisReconstruction.jl:地震數據重建工具

SeisPlot.jl :繪圖工具

這是SAIG設計的SeismicJulia總的軟體包結構,部分功能尚沒有多少內容,內容還不完整,仍處於開發中。而基於Julia v0.6版本開發的地震數據讀寫和處理工具包的名稱叫Seismic.jl,其代碼訪問地址為https://github.com/SeismicJulia/Seismic.jl,文檔訪問地址為http://seismicjulia.github.io/Seismic.jl/。下圖是Seismic軟體包在GitHub上的主頁:


Seismic擴展軟體包在GitHub上的頁面

Seismic.jl包含功能如下圖所示:


Seismic擴展軟體包主要功能組成

由圖可見,Seismic擴展軟體包主要功能組成包括四個方面,即實用工具包、處理功能包、成像功能包和求解器功能包。詳細功能如下:

(1)實用工具包

格式轉換:SEGY,SU和RSF格式間的互轉

內部格式的讀寫

時窗選取

觀測系統

道頭統計

選排

面元定義

補邊與反補邊

理論子波計算

(2)處理功能包

相似度

正常時差校正

切除

增益

疊加

帶通濾波和FK扇形濾波

拉登變換

五維插值

構造平滑

FX反褶積

平面波分解傾角估計

振幅包絡

(3)成像功能包

(4)求解器功能包

點積測試

基於內存或磁碟的預定義共軛梯度

迭代再加權最小二乘法(IRLS)

快速迭代軟閾值算法(FISTA)

五、Seismic使用說明和編程示例

在安裝好Julia開發環境後,使用Seismic.jl軟體包以前,需要安裝並檢查最新版本,這可在Julia命令行上運行下列命令即可:

Pkg.add(「Seismic」)

Pkg.checkout(「Seismic」)

下面給出了一個代碼示例和對應的繪圖輸出結果。代碼中通過幾個簡單的Julia函數實現了SEGY格式地震數據下載、格式轉換、時窗設置、數據讀取、地震剖面繪圖等功能,其中用到了PyPlot繪圖軟體包。 

基於Seismic軟體包的編程示例代碼

 上述Seismic編程代碼的繪圖輸出

六、結束語

Julia是一種新的程式語言,一種面向科學技術計算的高性能動態高級程序設計語言。Julia免費開源、簡單易用、性能卓越、支持並行,具有地球物理研究所需要的豐富的數據分析處理功能,也有豐富的擴展軟體包資源可以共享,一些研究者已經基於Julia語言開發了多個地震數據分析處理工具包,這些都為Julia語言在地球物理中的應用打下了良好的基礎。

我們相信,Julia程式語言將成為一種新的有效的地球物理技術研究工具。

2019年3月5日

《地學新探索》公眾號2019年文章清單:


敬請關注《地學新視野》

相關焦點

  • Julia程式語言助力天氣/氣候模式
    雖然主要集中於地球物理流體的模擬,但研究結果也表明對於在計算流體力學的廣闊領域中應用精度較低的Posit數制具有重要的意義和應用前景。在2018年8月8日,MIT正式發布程式語言Julia 語言的官網:https://julialang.org/Julia中文社區:https://cn.julialang.org/Julia 語言項目地址:https://github.com/JuliaLangMIT 開發的 Julia 語言是全球熱度上升最快的程式語言之一,下載量超過 200
  • Julia:一種新的科學計算程式語言
    Julia是一種新的程式語言,一種函數式程式語言,是一種面向科學技術計算的高性能動態高級程序設計語言。下載途徑包括:  (1)Julia 官網:下載地址為https://julialang.org/downloads,可以下載Julia的不同版本在不同作業系統下的安裝包。目前的最新穩定版本是v1.1.0,你可以根據你要安裝的作業系統平臺(支持Windows、macOS、Linux、FreeBSD)選擇下載相應的Julia軟體安裝包(二進位文件),或下載原始碼自己編譯。
  • 關於程式語言 Julia,開發團隊有這些想告訴你
    儘管如此,我認為 Julia 的未來非常光明,特別是現在核心語言特性已經穩定,我們可以將更多的注意力集中在核心生態系統建設上。Q3:你們是否認為在科學計算領域 Julia 可以取代 Python?我正在研究機器學習,主要是使用 Python 進行編程。
  • 我是如何愛上 Julia 程式語言的?
    為什麼 Julia 很快成了我最喜愛的數據科學程式語言。
  • Julia:集Python、C++、R等語言為一體的全新語言
    Julia語言的LogoJulia是一款免費的開源,高級,高性能,動態程式語言,適用於數值計算。它兼具動態語言的開發便利性和編譯的靜態類型語言的性能,部分歸功於基於LLVM的JIT編譯器生成本機機器代碼,部分是通過多個專業化實現類型穩定性的設計,這使得代碼編譯更高效。
  • 程式語言新寵兒 — Julia 誕生記 - OSCHINA - 中文開源技術交流社區
    )等方面研究。文中探討了Julia語言的開發緣由以及它的新特性。筆者認為一門新語言的誕生勢必會掀起一陣新的旋風,開發者在享受它帶來樂趣的同時也在為它的存在價值而爭論不休,究竟Julia能否給開發者帶來新的福音呢?
  • Julia語言-「動靜結合」的科學計算語言
    由MIT開發的Julia語言是一種發展迅猛的開源科學計算程式語言。
  • 新語言不焦慮!這裡有一份Julia極簡入門教程
    Julia 1.0 重磅發布》的文章,為各位讀者報導了有關新興程式語言 Julia 1.0 的有關情況,當時有不少讀者在評論區留言:有沒有教程?今天我們就為有這個需求的讀者朋友們帶來 Julia 極簡入門教程,希望可以幫到你!
  • Julia語言介紹,與大熱門Python有啥區別呢?
    Julia是一種高級程式語言,由麻省理工學院(MIT)的4個人開發。它是一種開源的、高性能的、高級的、用於科學計算的動態程式語言。它主要用於數據分析和統計計算,類似於R程式語言。Julia的主要優點是它的速度,它的應用程式與Python或R相比,運行時間更快。它支持執行困難的任務,比如雲計算和並行,這被認為是執行大數據分析的基礎。
  • 有了Julia語言,深度學習框架從此不需要計算圖
    >本文基於 NeurIPS MLSys 的一篇論文《Fashionable Modelling with Flux》,探討開發者們如何使用 Julia 語言從頭開始思考機器學習工具,並提供對於現代機器學習工具所需改進的一些見解,涉及新的可微分編程工具 Flux、求梯度、支持 GPU 和 TPU、自動批處理。
  • Julia語言與宏觀經濟應用(1): Why Julia?
    、Python語言與編程匯總。當然,我主要是使用Matlab編程,而許坤博士主要是使用R語言。我在2017年初為人師時,讓我的大一學生去自學Python。可是,今天開始,我又推薦大家去學Julia,如果你有「選擇困難症」,我建議你抓鬮,一種即可!我不是為你推薦的,我只是為那些未學任何程式語言、又想學的人提供一個入門的「途徑」。
  • MIT正式發布程式語言Julia 1.0:Python、R、C++三合一
    MIT 開發的 Julia 語言是全球熱度上升最快的程式語言之一,下載量超過 200 萬次,下載者包括谷歌、Facebook、FAA 和美國能源部等各個部門的開發者。近日,MIT CSAIL 實驗室正式發布了 Julia 1.0,該語言期望結合 C 的速度、Matlab 的數學表徵、Python 的通用編程與 Shell 的膠水命令行,並構建開源、自由與便捷的程式語言。
  • 和 C 一樣快的科學計算語言Julia了解一下! | 公開課&線下活動預告
    >Julia 是一個為科學和數值計算而生的程式語言,它同時有像 Python 一樣的簡潔語句、和 C 媲美的超快速度、跟 Lisp 一樣的元編程能力。本次直播的內容有:1.簡單介紹Julia語言2.Julia語言的安裝配置指南3.Julia語言的基本語法4.一切都是對象,在Julia語言中使用面向對象5.一切都是表達式,用Julia的宏進行元編程6.如何在Julia裡調用Python:PyCall.jl7
  • Julia的暗黑語法:Unicode輸入
    很多語言都支持Unicode,但像Julia直接內置一套Unicode的輸入語法還是第一次見。
  • 1 Julia簡介及安裝
    Julia簡介參考維基百科歷史一群擁有各種語言豐富編程經驗的Matlab高級用戶,對現有的科學計算編程工具感到不滿——這些軟體對自己專長的領域表現得非常棒,但在其它領域卻非常糟糕。>特點核心語言非常小。
  • Julia CFD 00 系列說明
    該系列是一個學習計算流體動力學基礎的實用模塊,通過編制電腦程式求解描述流體流動物理的基本偏微分方程。系列來自于波士頓大學機械工程系Lorena Barba教授2009年至2013年期間所教授課程的一部分(Barba教授後來搬到喬治華盛頓大學),項目地址:https://github.com/barbagroup/CFDPython。
  • Julia CFD|00 系列說明
    該系列是一個學習計算流體動力學基礎的實用模塊,通過編制電腦程式求解描述流體流動物理的基本偏微分方程。系列來自于波士頓大學機械工程系Lorena Barba教授2009年至2013年期間所教授課程的一部分(Barba教授後來搬到喬治華盛頓大學),項目地址:https://github.com/barbagroup/CFDPython。
  • Julia編程基礎 - 第 5 章 數值與運算(中)
    比如:julia> 0 / 0NaNjulia> Inf - InfNaNjulia> Inf16 - Inf16NaN16julia> -Inf - -InfNaNjulia> Inf / InfNaNjulia> Inf32 / Inf32NaN32julia
  • Julia:世界上知名的大公司都在使用這款新的程式語言!
    程式語言可謂種類繁多;數學家、研究人員和數據科學家面臨的一大問題常常是,找到實際上適合手頭處理的任何任務的某一種語言。為了避免困難,總部位於孟加拉國和美國的初創公司Julia Computing的幾位聯合創始人開發出了一種通用程式語言:Julia,不是程式設計師的人經過培訓就能使用這種語言。
  • Julia教程1:Julia學習資料與工作環境
    學習一門語言之前,能夠清楚的知道碰到問題可以去哪裡找答案是非常重要的,同時一個個性化的工作環境更是可以讓工作效率成倍提升。這裡就我收集的一些Julia的學習資料介紹一下,並介紹一下如何搭建一個Julia的工作環境。學習資料由於是一門比較新興的語言,所以其實學習資料並不是特別多,特別是對於那些對計算機編程本身就不熟悉的人來說,更是麻煩。