文章目录
1 griddata函数介绍2 离散点插值到均匀网格3 均匀网格插值到离散点4 获取最近邻的Index
插值操作非常常见,数学思想也很好理解。常见的一维插值很容易实现,相对来说,要实现较快的二维插值,比较难以实现。这里就建议直接使用scipy 的griddata函数。
1 griddata函数介绍
官网介绍
2 离散点插值到均匀网格
def interp2d_station_to_grid(lon,lat,data,loc_range = [18,54,73,135],
det_grid = 1 ,method = 'cubic'):
'''
func : 将站点数据插值到等经纬度格点
inputs:
lon: 站点的经度
lat: 站点的纬度
data: 对应经纬度站点的 气象要素值
loc_range: [lat_min,lat_max,lon_min,lon_max]。站点数据插值到loc_range这个范围
det_grid: 插值形成的网格空间分辨率
method: 所选插值方法,默认 0.125
return:
[lon_grid,lat_grid,data_grid]
'''
#step1: 先将 lon,lat,data转换成 n*1 的array数组
lon = np.array(lon).reshape(-1,1)
lat = np.array(lat).reshape(-1,1)
data = np.array(data).reshape(-1,1)
#shape = [n,2]
points = np.concatenate([lon,lat],axis = 1)
#step2:确定插值区域的经纬度网格
lat_min = loc_range[0]
lat_max = loc_range[1]
lon_min = loc_range[2]
lon_max = loc_range[3]
lon_grid, lat_grid = np.meshgrid(np.arange(lon_min,lon_max+det_grid,det_grid),
np.arange(lat_min,lat_max+det_grid,det_grid))
#step3:进行网格插值
grid_data = griddata(points,data,(lon_grid,lat_grid),method = method)
grid_data = grid_data[:,:,0]
#保证纬度从上到下是递减的
if lat_grid[0,0] |