Python Data

博客分类: tools 阅读次数: comments

Python Data

插值

反距离加权(IDW)插值

Interpolation between grids with cKDTree Interpolation between grids with Basemap

Point Interpolation

Scipy.interpolate linear

Natural neighbor interpolation (MetPy implementation)

Cressman interpolation 研究表明,温度相关参数的最优空间插值搜索半径介于150~250km之间 [潘耀忠,龚道溢,邓磊,等.2004.基于DEM的中国陆地多年平均温度插值方法[J].地理学报,2004,59(3):366-374.] mipylib.numeric.minum.griddata(points, values, xi=None, **kwargs) https://journals.ametsoc.org/doi/pdf/10.1175/JTECH-D-15-0250.1 https://www3.epa.gov/scram001/adhoc/Gaudet2012.pdf https://esrl.noaa.gov/csd/events/iwaqfr/presentations/posters/Zhao_Theme5.pdf https://www.jcsda.noaa.gov/documents/meetings/wkshp2008/5/kondragunta_jcsdapresentation_10jun08.pdf https://www.hindawi.com/journals/amete/2016/9873815/ 伴随 基于观测、模拟和同化数据的 PM2.5 污染回顾分析

Barnes Interpolation

Radial basis function interpolation

Inverse Distance Verification: Cressman and Barnes

scipy.interpolate.griddata ~= matlab-griddata

matplotlib自带插值

Interpolation points data into 2-d shapefile with matplotlib

例子

使用python的Basemap (2) - MetPy和wrf-python的內插

紀錄分別使用MetPy和wrf-python兩種套件做內插的結果

目的是要做在850hPa上的溫度場

使用兩種方式做,分別為

  1. MetPy的log_interp

  2. wrf-python的interpz3d

MetPy:

in1

這裡的matplotlib應該是不需要import進來,忘記刪掉了 mcalc則是之後內插要用的 metpy.constant那邊import進去的那兩個常數是算位溫時會用到

in2

一樣只是讀檔讀資料 因為內插到等壓面上,所以也要讀氣壓資料,P是基本場,PB是擾動場 溫度的部分,nc檔裡面的T指的是擾動位溫,所以先加個300K的基本場

in3

然後MetPy我翻了老半天 裡面只有溫度轉位溫的函式,沒有位溫轉溫度的 所以只好自己手動算 ( 就是為什麼前面會import P0跟Kappa這兩個常數) 溫度和位溫的關係式我有用LaTex打在上面,看起來比較厲害一點

下面就是內插的部份了 MetPy的 log_interp 可以一次內插到很多個位置上 不過我只有要850hPa,所以 pLevs 就只有設在850上

log_interp的文件在這 https://unidata.github.io/MetPy/latest/api/generated/metpy.calc.log_interp.html#metpy.calc.log_interp 其實我看了說明之後也不太確定為什麼會是用這個 log_interp來做內插 不過我看MetPy裡面示範從模式的Sigma座標內插到等壓面就是用這個 所以我就直接學它了

log_interp 其實可以一次內插很多種變數 所以假設我打 log_interp( plevs, pressure, temperature, qvapor, axis=1 ) 這樣就會回傳 1. 溫度在plevs這個壓力面的內插值和 2. 水氣在plevs這個壓力面的內插值 不過我只有要內插溫度就是了 axis = 1 則是看要內插的是哪個維度 因為temperature是四維的變數: ( 時間, Z方向, Y方向, X方向 ) 所以axis = 1來指定是內插 Z方向 而內插的結果會保留Z方向這個維度: ( 61, 27, 150, 150) -> ( 61, 1, 150, 150) 所以再用np.squeeze讓它變三維就好

in4

畫圖就跟上一篇畫降雨的差不多了,換個變數而已 最後結果是這樣

in5


看起來跟之前用NCL畫的不太一樣 但是用非常大概的角度看的話,主要的低溫部分都差不多 可能是因為這裡是用單一個模式輸出的去畫,之前用NCL畫的是系集平均吧

wrf-python 用wrf-python畫的其實步驟也差不多,換個函數而已

in6

in7

使用wrf-python來把位溫轉溫度時,因為有wrf.tk可用所以就不用再自己算了 而且還可以指定單位,所以就直接設是攝氏了

內插的部分使用 wrf.interpz3d 這邊用起來感覺比較簡單一點,丟溫度場、氣壓場和想要內插的氣壓面 就會回傳內插完、在指定等壓面上的溫度場了 不需要像用MetPy的log_interp時一樣要指定內插的維度 不過要注意,wrf.interpz3d 規定丟進去的變數 ( 這裡就是指要做內插的溫度場和氣壓場) 最右邊的維度必須是nz * ny * nx,然後兩個變數的維度都要一模一樣 像這裡的溫度和氣壓場,都是 ( 61, 27, 150, 150 ),分別是時間、Z方向、Y方向、X方向 所以就符合wrf.interpz3d的要求

另外不像MetPy的log_interp wrf.interpz3d不能一次內插到好幾個位置上 所以假設想要找在950hPa、850hPa、750hPa、500hPa的溫度場 就只能老實的寫個迴圈做4次內插了

in8

畫圖的部分大概是這樣,反正和上面的幾乎一樣 最後的結果會長這樣

in9 和用MetPy內插的結果根本幾乎一樣 我找了超久才找到不一樣的地方

所以兩種應該是都沒什麼差 就看之後遇到的情況或心情決定用哪個了 如果資料讀出來就直接內插畫圖,那應該MetPy或wrf-python都可 不過如果有需要做一些計算才要畫,那看起來優先用wrf-python處理應該還是比較好一點

不過wrf-python有建議再裝PyNgl來做畫圖的部分 但PyNgl好像還沒有支援python 3.X版本 而且試過NCL的畫圖方式後還是比較喜歡MATLAB / matplotlib的感覺 所以就沒有研究了

plot

Interpolation points data into 2-d shapefile with matplotlib

点到点的插值

Python interpolate point value on 2D grid scipy.interpolate.griddata or scipy.interpolate.interp2d

距离

概率分布之间的距离度量以及python实现

回归

PythonMachineLearning

Linear_Regression_Methods

通量

Fluxpart is a Python 3 module that implements the Scanlon and Sahu [SS08] method for partitioning eddy covariance measurements of water vapor and carbon dioxide fluxes into stomatal (transpiration, photosynthesis) and nonstomatal (evaporation, respiration) components, e.g.

#EOF 分析 用Python做EOF分析

other questions?

how to interpolate points in a specific interval on a plot formed by loading a txt file in to scipy program?