这里主要介绍scipy.interpolate
中的插值方法在气象空间数据中的应用。
官方文档:https://docs.scipy.org/doc/scipy/reference/interpolate.html
LinearNDInterpolator
N维分段双线性插值
olon = np.linspace(_minLon,_maxLon, int( (_maxLon - _minLon)/ _res + 0.1) +1 )
olat = np.linspace(_minLat,_maxLat, int( (_maxLat - _minLat)/ _res + 0.1) +1 )
cartcoord = list(zip(lon, lat))
interp = interpolate.LinearNDInterpolator(cartcoord, zvalue, )
zvalue_new = interp(olon, olat)
效果
CloughTocher2DInterpolator
2D数据中的分段三次样条插值,C1平滑,曲率最小化插值
cartcoord = list(zip(lon, lat))
interp = interpolate.LinearNDInterpolator(cartcoord, zvalue, )
zvalue_new = interp(olon, olat)
效果
SmoothBivariateSpline
平滑的二元样条近似
interp = interpolate.SmoothBivariateSpline(lon, lat, zvalue, kx=2, ky=2, s=0)
zvalue_new = interp.ev(olon, olat)
效果
Rbf
用于n维散乱数据的径向基函数逼近/插值
少量数据可以,大量自动站插值会出错(求解矩阵)。
func = Rbf(lon, lat, zvalue,function='linear')
zvalue_new = func(olon, olat)
griddata
插值D维无结构数据(散点)
大量自动站数据插值会出错。
zvalue_new = interpolate.griddata((lon,lat),zvalue,(olon,olat),method='linear')
interpn
双线性内插
lon = np.linspace(startlon, endlon, xsize, dtype='f8')
lat = np.linspace(startlat, endlat, ysize, dtype='f8')
itrp_pre = interpolate.interpn((lat, lon), grid_data, obs_data[['Lat','Lon']].values.astype('f8'), method='linear')