scipy.interpolate.griddata插值结果全为同一值问题排查
问题与分析:网格插值后结果全为单一值的原因
问题背景
我持有美国全域3km×3km网格的温度数据集:温度数据temperature_data、各网格点的纬度数组lats、经度数组lons的形状均为(1060,1800)。需要将该数据外插至某子区域的高分辨率网格(对应纬度rlats、经度rlons形状为(720,3840))。使用scipy.interpolate.griddata编写代码如下:
highres_temps = griddata((lats.flatten(), lons.flatten()), temperature_data.flatten(), (rlons, rlats), 'nearest')
但输出结果显示新网格所有值完全一致:
print(np.amax(highres_temps)) print(np.amin(highres_temps)) 28.175049 28.175049
对比放大后的目标区域高分辨率网格温度图与原数据集对应区域温度图,二者温度分布明显不匹配。
核心原因
- 坐标顺序完全搞反了:
scipy.interpolate.griddata的输入坐标对要求遵循**(x轴坐标, y轴坐标)的顺序,也就是地理数据里的经度(lon)在前,纬度(lat)在后**。你传入的(lats.flatten(), lons.flatten())把纬度放在了x轴位置,经度放在y轴,和目标网格的(rlons, rlats)顺序完全不匹配,导致插值时所有高分辨率点都匹配到了同一个错误的最近邻点,最终输出全为单一值。 - 额外需要确认:如果目标网格的坐标范围完全超出了原数据集的覆盖范围,
nearest方法会直接取边界值,但从对比图来看,核心问题还是坐标顺序错误。
修正后的代码
将输入坐标的顺序调整为经度在前、纬度在后,同时显式指定method参数:
from scipy.interpolate import griddata import numpy as np highres_temps = griddata( (lons.flatten(), lats.flatten()), temperature_data.flatten(), (rlons, rlats), method='nearest' )
内容的提问来源于stack exchange,提问作者Miss_Orchid
相关产品推荐
相关产品推荐

