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

numpy库interp()函数采用的插值技术是什么?附代码示例

NumPy np.interp() 的插值技术原理

np.interp() 本质是分段线性插值,但它对输入的基准点序列xp和对应值yp有特殊的前置处理逻辑,这也是你两个示例结果差异的核心原因。

核心处理逻辑

  • 第一步:遍历xp序列,仅保留每个x值最后一次出现对应的y值,相当于对重复x值做“覆盖保留最新”操作。
  • 第二步:将去重并保留最后一次值后的xp和yp,按xp的数值升序重新排列。
  • 第三步:在排序后的基准点序列上,执行常规分段线性插值:找到目标x所在的相邻区间[xp_i, xp_{i+1}],用线性公式计算插值结果:
    y = yp_i + (x - xp_i) * (yp_{i+1} - yp_i) / (xp_{i+1} - xp_i)
    

针对示例的具体解析

第一个示例

输入代码:

import numpy as np

x = [4.5]
xp = [4, 5, 4, 3]
yp = [2, 4, 6, 5]

处理流程:

  1. 保留每个x值最后一次出现的y值:x=4对应y=6,x=5对应y=4,x=3对应y=5。
  2. 按xp升序排序后得到:xp_sorted = [3,4,5],yp_sorted = [5,6,4]。
  3. x=4.5落在[4,5]区间,计算线性插值:
    y = 6 + (4.5-4)*(4-6)/(5-4) = 6 + 0.5*(-2) = 5.0,与输出结果一致。

第二个示例

输入代码:

import numpy as np

x = [4.5]
xp = [4, 5, 4]
yp = [2, 4, 6]

处理流程:

  1. 保留每个x值最后一次出现的y值:x=4对应y=6,x=5对应y=4。
  2. 按xp升序排序后得到:xp_sorted = [4,5],yp_sorted = [6,4]。
  3. x=4.5落在[4,5]区间,计算线性插值:
    y = 6 + (4.5-4)*(4-6)/(5-4) = 6 + 0.5*(-2) = 6.0,与输出结果一致。

补充说明

  • 若目标x小于处理后xp的最小值,函数返回最小xp对应的y值;若x大于最大值,返回最大xp对应的y值。
  • 若处理后的xp仍存在重复x值,函数会直接使用最后一个对应的y值参与计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 12:45:34