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]
处理流程:
- 保留每个x值最后一次出现的y值:x=4对应y=6,x=5对应y=4,x=3对应y=5。
- 按xp升序排序后得到:
xp_sorted = [3,4,5],yp_sorted = [5,6,4]。 - 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]
处理流程:
- 保留每个x值最后一次出现的y值:x=4对应y=6,x=5对应y=4。
- 按xp升序排序后得到:
xp_sorted = [4,5],yp_sorted = [6,4]。 - 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
相关产品推荐
相关产品推荐

