Python 格点数据插值到站点 双线性插值 | 您所在的位置:网站首页 › 格点法公式 › Python 格点数据插值到站点 双线性插值 |
双线性插值:已知网格点Q12,Q22,Q11,Q21,但是要插值的点为P点,这就要用双线性插值了,首先在x轴方向上,对R1和R2两个点进行插值,这个很简单,然后根据R1和R2对P点进行插值,这就是所谓的双线性插值。在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值。 不是所有的数据都需要这一步。 我们使用的 ERA5 纬度从大到小,不符合使用习惯。需要这一步处理。 latitude_old = latitude.copy() t2m_old = t2m.copy() nlats = len(latitude) for i in range(nlats): latitude[i] = latitude_old[nlats-1-i] print(nlats-1-i, latitude_old[nlats-1-i]) t2m[i,:] = t2m_old[nlats-1-i,:] 5. 将格点范围内的站点筛选出来(非必须)将只在格点范围内的站点筛选出来,不在格点范围内的站点我们不进行插值; 此情况适用条件:站点数据范围比格点的数据范围大 # ERA5数据经纬度范围 lonMin = np.min(longitude) lonMax = np.max(longitude) latMin = np.min(latitude) latMax = np.max(latitude) #筛选范围内的气象站点 stations_info = stations_info[stations_info["经度"] >= lonMin] stations_info = stations_info[stations_info["经度"] = latMin] stations_info = stations_info[stations_info["纬度"] lonSta[i]: iSta = iSta - 1 # 经度左下角点在经度array里的索引 jSta = np.searchsorted(latitude, latSta[i]) if latitude[jSta] > latSta[i]: jSta = jSta - 1 # 纬度左下角点在纬度array里的索引 var11 = var[jSta, iSta] #### t2m -> var var21 = var[jSta, iSta+1] var12 = var[jSta+1, iSta] var22 = var[jSta+1, iSta+1] # 改变变量名,为了公式计算时候方便 x = lonSta[i] y = latSta[i] x1 = longitude[iSta] x2 = longitude[iSta+1] y1 = latitude[jSta] y2 = latitude[jSta+1] arg = 1.0 / ((x2 - x1)*(y2 - y1)) arg11 = arg * (x2 - x) * (y2 - y) arg21 = arg * (x - x1) * (y2 - y) arg12 = arg * (x2 - x) * (y - y1) arg22 = arg * (x - x1) * (y - y1) var_interp = arg11*var11 + arg21*var21 + arg12*var12 + arg22*var22 var_sta.append(var_interp) return var_sta t2m_sta_bilinear = Bilinear_interp(lonSta, latSta, longitude, latitude, t2m) stations_info['t2m_bilinear'] = np.array(t2m_sta_bilinear) stations_info.index = range(len(lonSta)) stations_info.to_excel('weather_station_data.xlsx', sheet_name='Sheet1') |
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |