天天看點

引力波資料居然是用 Python 分析的

美國科學家11日宣布,他們去年9月首次探測到引力波。這一發現印證了實體學大師愛因斯坦100年前的預言。宣布這一發現的,是雷射幹涉引力波天文台(ligo)的負責人。

這個機構誕生于上世紀90年代,進行引力波觀測已經有近30年。那麼觀測到的引力波資料的量應該很大,科學家如何對這些資料進行分析?有沒有用到python程式設計語言?

答案是肯定的。筆者在github上發現了一個專門用于分析引力波資料的python包:gwpy[1]。據維護者介紹,gwpy的代碼來自ligo和另一個名叫virgo的機構,維護者将這兩個機構科學家的python代碼整理,最終的産品就是gwpy這個使用者友好的python包。

在具體介紹gwpy之前,先給和筆者一樣的小白簡單科普一下引力波和ligo的相關知識。

什麼是引力波?

引力波資料居然是用 Python 分析的

上圖是兩個黑洞所産生的引力波的3-d模拟圖(nasa)。

首 先,什麼是引力波?在實體學上,引力波是愛因斯坦廣義相對論所預言的一種以光速傳播的時空波動,如同石頭丢進水裡産生的波紋一樣,引力波被視為宇宙中的 “時空漣漪”。通常引力波的産生非常困難,地球圍繞太陽以每秒30千米的速度前進,發出的引力波功率僅為200瓦,還不如家用電鍋功率大。宇宙中大品質 天體的加速、碰撞和合并等事件才可以形成強大的引力波,但能産生這種較強引力波的波源距離地球都十分遙遠,傳播到地球時變得非常微弱。

下面分享兩個優秀的視訊,很好地解釋了引力波及背後的原理。第一個來自ligo,第二個則是比較通俗的漫畫式講解。

ligo科學家的解釋:

漫畫式通俗解釋:

ligo是什麼?

雷射幹涉引力波觀測站laser interferometer gravitational-wave observatoryligo是加州理工學院(caltech)和麻省理工學院(mit)的合作實驗室,現在也有其他的大學參與。實驗資金來源于美國國家科學基金會。ligo是用來尋找宇宙中的引力波,進而可以驗證黑洞的存在和檢驗廣義相對論。

引力波資料居然是用 Python 分析的

ligo 主要有兩個觀測點,位于路易斯安那livingston parish的ligo livingston觀測點,和華盛頓 hanford的ligo hanford觀測點。除此之外,在加州passadena 的caltech校園中還有ligo 40m prototype 。

ligo是如何探測引力波的?

gwpy:ligo用它分析引力波資料?

引力波資料居然是用 Python 分析的

接下來是本文的重頭戲。我們一起來學習如何gwpy分析引力波資料。下面的介紹及示例均來自gwpy的官方文檔[2]。

安裝

很簡單,pip install gwpy就可以完成安裝。

不過安裝的過程可能會比較長,因為gwpy使用的依賴包比較多,包括numpy、 scipy、 cycler、matplotlib、astropy等。

面向對象程式設計

gwpy是一個面向對象程式設計的python包,也就是說,資料對象是這個包的核心關注點。每一個資料對象都展現為一個類執行個體,包含了其屬性和包含的資料。

如果想建立一個新的類執行個體,建議使用标準的建構器constructor。舉個例子,我們可以使用一個資料數組,生成一個timeseries對象:

或者從線上資料伺服器上下載下傳:

核心資料對象

據介紹,gwpy提供了4種核心資料對象,分别代表引力波探測器所産生的四種标準資料:

timeseries(時間序列資料)

spectrum(光譜資料)

spectrogram(光譜圖)

dataqualityflag

引力波資料可視化

我們知道,将引力波探測器收集的資料可視化,對于了解引力波的特性、研究引力波信号來說非常有幫助。gwpy.plotter子產品中提供了一些plot類,可以直覺地展示相應的資料類型。

gwpy的核心資料對象裡,大部分都内置有一個plot()方法,可以讓研究人員快速對某個資料集進行可視化展示。舉個例子:

引力波資料居然是用 Python 分析的

gwpy:利用公開的ligo資料進行繪圖

我們接下來利用ligo公開的一些引力波時間序列資料進行繪圖。我們可以直接線上加載這些資料。首先導入我們需要的子產品:

然後,下載下傳資料,儲存為文本字元串:

現在,我們可以對文本進行解析,補充必要的中繼資料之後,就可以生成一個timeseries:

最後,我們就可以繪圖了:

引力波資料居然是用 Python 分析的

====================================分割線================================