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

scipy.interpolate.LinearNDInterpolator与interp2d插值结果差异问询

为什么scipy的interp2d和LinearNDInterpolator插值结果不同?

核心差异:插值方法本质不同

interp2d和LinearNDInterpolator虽都标注为"线性插值",但适用场景与计算逻辑完全不同:

  • interp2d:针对规则网格数据执行双线性插值。它会先将输入点视为规则网格(提取x、y的唯一值并排序),再分别在x、y方向做线性插值,最终组合得到结果。
  • LinearNDInterpolator:针对任意分布的不规则点集,先对输入点做Delaunay三角剖分,再在目标点所在的三角形内执行三角形线性插值。

你的案例具体计算验证

输入的矩形规则网格点:

# x,y坐标点
a=[[0.6, 20], [0.6, 30], [0.8, 20], [0.8, 30]]
# 对应z值
b=[1.71, 1.43, 1.57, 1.44]

目标计算点:[0.7,25]

1. interp2d的双线性插值计算

步骤1:先在x=0.6和x=0.8的y方向插值,得到y=25时的z值

  • x=0.6时:z = 1.71 + (1.43-1.71)*(25-20)/(30-20) = 1.57
  • x=0.8时:z = 1.57 + (1.44-1.57)*(25-20)/(30-20) = 1.505

步骤2:在y=25的x方向插值,得到x=0.7时的z值

  • z = 1.57 + (1.505-1.57)*(0.7-0.6)/(0.8-0.6) = 1.5375
    这就是b1的结果。

2. LinearNDInterpolator的三角剖分插值计算

四个矩形点会被剖分为两个三角形,目标点[0.7,25]落在三角形(0.6,30), (0.8,20), (0.8,30)内。拟合该三角形的平面方程z = Ax + By + C,代入三个点求解得:

  • A=0.05,B=-0.013,C=1.79

代入目标点计算:
z = 0.05*0.7 -0.013*25 +1.79 = 0.035 -0.325 +1.79 = 1.5
这就是b2的结果。

结论

两种函数的结果差异由插值方法的本质不同导致:

  • 处理规则网格数据时,优先使用interp2d(或scipy官方推荐替代的RegularGridInterpolator)
  • 处理不规则分布点集时,使用LinearNDInterpolator

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 10:12:34