You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MetPy interpolate_to_grid限制数据域后返回异常nan值问题咨询

问题原因

这是interpolate_to_grid使用Cressman插值时的预期行为,既不是程序bug,也不是你的使用方法错误,核心原因有两点:

  1. Cressman插值属于距离权重类插值,对每一个目标网格点,只会搜索指定搜索半径范围内的观测站点,如果范围内没有有效站点,就会直接返回NaN。
  2. 你裁剪北美区域时用的是经纬度矩形框选,但兰伯特正形投影属于锥形投影,经纬度的矩形边界投影后会变成斜向的不规则边界,插值函数默认生成的网格是覆盖所有投影后站点坐标的最小矩形,这个矩形的边角区域会落在实际站点分布范围之外,没有足够观测站支撑插值,就会产生NaN。
    虽然你画图的目标区域是美国中部,看起来离你设置的北美经纬度边界很远,但投影后的站点分布边界和网格边界的偏差,刚好会覆盖到你绘图区域的边缘,因此出现了等值线断裂问题。

解决办法

以下方案都不需要使用全量数据集,不会明显降低运行效率:

  • 扩大裁剪范围:把经纬度裁剪的边界向外多扩10-15个经纬度,保证投影后的站点范围能完整包裹插值网格的所有区域,避免出现无站点覆盖的边角网格
  • 显式指定插值范围:调用interpolate_to_grid时添加bounds参数,手动指定插值网格的坐标范围,仅覆盖你实际需要的绘图区域加少量缓冲即可,避免生成多余的边角网格
  • 调整Cressman搜索半径:添加search_radius参数,默认搜索半径为3倍hres(即60km),可适当调大到80-100km,覆盖更多边缘网格点,注意不要调太大避免插值结果失真
  • 更换插值方法:如果业务允许,可将interp_type改为linear或nearest,这两种插值方式不会产生空白区域,其中线性插值的平滑效果和Cressman接近

参考修改示例:

# 方案1:扩大经纬度裁剪范围
q = df0.loc[(df0['latitude'].values>=10) & (df0['latitude'].values<=80) &
(df0['longitude'].values>=-160) & (df0['longitude'].values<=-50)]
df = q

# 方案2:手动指定插值范围,参数为投影后的坐标边界,可根据实际绘图区域调整
Tgridx2, Tgridy2, Temp2 = interpolate_to_grid(xm2, ym2, tmp2, hres = 20000, interp_type='cressman',
                                              bounds=[-1.2e6, 0.2e6, -3e5, 7e5])

内容的提问来源于stack exchange,提问作者gdlewen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 16:06:06