气象 python二维插值

一、函数

scipy.interpolate.griddata(points, values, xi, method=‘linear’, fill_value=nan, rescale=False)
官网:https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.griddata.html?highlight=griddata

二、参数

values

一维数组,shape为(n,) ,是需要插值的变量数据
如果需要插值的变量var是一个多维数组,则需要转换成一维的
方法:var.ravel()

points

values的坐标,shape为(n,D),第一维需要与values长度相同,
D就是values的坐标轴个数
如果是在地图上,D为2,分别是lon、lat,是values中对应的每个数据的lat和lon

xi

插值过后的新的坐标,shape为(m, D) ,第二维与points的第二维相同

method

插值方法,有 ‘linear’, ‘nearest’, ‘cubic’
nearest:返回最接近插值点的数据点的值
linear:线性插值
cubic:三次样条

fill_value

用于填充输入点凸包之外的请求点的值。如果未提供,则默认值为 nan 。此选项对‘nearest’ 方法无效。

rescale

在执行插值之前将点重新缩放到单位立方体。如果某些输入维度具有不可比较的单位并且相差许多数量级,这将很有用。
#三、气象应用

file = xr.open_dataset(r'.\hgt_2012.nc')
hgt= file.z#二维数组(lat,lon)
var=hgt.values
lons = file['longitude'].values
lats = file['latitude'].values
lat_new, lon_new= np.mgrid[-90.0:90.25:0.25,0.0:359.25:0.25]


nlat=lat_new.shape[0]
nlon=lat_new.shape[1]
lons = np.tile(lons,241)
lats = np.repeat(lats,480)
points = np.stack([lons,lats],axis = -1)
lon_new= lon_new.ravel()
lat_new= lat_new.ravel()
xi= np.stack([lon_new,lat_new],axis = -1)
var= var.ravel()
varnew=griddata(points,var,xi,method='linear',fill_value=0,rescale=True) 
varnew= varnew.reshape((nlat, nlon))
varnew=varnew[::-1,:]

你可能感兴趣的:(气象python,python)