Python氣象數(shù)據(jù)處理中的數(shù)值微分和積分法——其二
1.3 一般情況下的微分
對于一般情況下的微分計算,Numpy和Metpy模塊等都提供了函數(shù),這里我們以水平散度為例,差分形式的表達式為
1.3.1 Numpy(推薦)
Numpy模塊提供了計算差分的函數(shù)numpy.gradient(f, axis, …),主要參數(shù)為
f:一個N維數(shù)組;
axis:f沿著axis的方向做差分。
返回f的差分,大小與f相同。
主要編程思路如下(三維數(shù)據(jù)):
1.3.2 Metpy
Metpy模塊也提供了類似的函數(shù)metpy.calc.gradient(f, …),主要參數(shù)為
f:一個N維的數(shù)組,格式為dataarray時可以不填其他參數(shù)。
函數(shù)會識別f的坐標,返回其梯度,大小與f相同。
?
主要編程思路如下(三維數(shù)據(jù)):
綜上,Metpy在差分時可能會自動對坐標進行變化,比如將經(jīng)緯度變換為長度、將時間單位轉(zhuǎn)為秒等;而Numpy僅做數(shù)值計算,需要自行變換坐標。Metpy雖然代碼簡單,但容易出錯,更推薦使用Numpy計算差分。
2 數(shù)值積分法
Numpy、Xarray模塊等提供了計算數(shù)值積分的函數(shù),這里推薦Xarray的(簡便且不易出錯),以整層散度為例,表達式為
Xarray自帶的積分函數(shù)是基于梯形法則,如果積分軸上坐標密度較高,結(jié)果與樣條法等應(yīng)該差別不大。主要編程思路如下:
使用這個函數(shù)需要提前截取積分范圍內(nèi)的數(shù)據(jù),因為函數(shù)不能選定積分范圍;另外,如果對于空白的值(如地形以下的部分)需要設(shè)置為0,如果設(shè)置為nan,則積分結(jié)果也為nan(與NCL不同)。
That's all.