Numpy一维线性插值函数interp详解与使用示例
本文详细介绍Numpy库中一维线性插值函数numpy.interp的用法。涵盖xp、fp、left、right及period等关键参数的定义与作用,通过插入点在内、外及正弦波周期插值三个具体代码示例,演示如何获取离散数据的分段线性插值结果,帮助开发者掌握该函数的实际应用场景。
函数签名与参数概览
首先直接列出该函数的完整签名:
numpy.interp(x, xp, fp, left=None, right=None, period=None)
x:指定需要计算插值结果的横坐标点或数组。
xp:包含已知数据点横坐标的一维数组,通常要求单调递增(除非指定了period参数)。
fp:与xp等长的一维数组,表示对应于xp中各点的已知纵坐标值。
left:可选参数,用于指定当查询点x小于xp中最小值时,返回的y值。
right:可选参数,用于指定当查询点x大于xp中最大值时,返回的y值。
left和right共同定义了当x超出xp定义域范围时的边界处理策略。
基础使用示例与输出结果
以下是几个典型的使用场景示例:
示例1:
import numpy as np
xp = [1, 2, 3]
fp = [3, 2, 0]
print(np.interp(2.5, xp, fp))
输出结果为:1.0
示例2:
import numpy as np
xp = [1, 2, 3]
fp = [3, 2, 0]
x = [0, 1, 1.5, 2.72, 3.14]
print(np.interp(x, xp, fp))
输出结果为:[3. 3. 2.5 0.56 0. ]
示例3:
import numpy as np
xp = [1, 2, 3]
fp = [3, 2, 0]
x = [0, 1, 1.5, 2.72, 3.14]
print(np.interp(x, xp, fp, -99, 99))
输出结果为:[-99. 3. 2.5 0.56 99. ]
参数详细定义与机制说明
补充说明:关于Numpy一维插值函数interp的核心机制。
函数签名再次确认为:numpy.interp(x, xp, fp, left=None, right=None, period=None)
该函数返回离散数据的一维分段线性插值结果。返回值可以是浮点数、复数(若fp为复数)或ndarray数组,其形状与输入的x保持一致。
x参数:数组类型,代表待插值数据的横坐标。
xp参数:一维浮点数序列,表示原始数据点的横坐标。若未指定period参数,xp必须严格递增;若指定了period,则xp会在内部通过xp = xp % period进行正则化后排序。
fp参数:一维浮点数或复数序列,表示原始数据点的纵坐标,长度必须与xp相同。
left参数:可选,类型为浮点数或复数(需与fp类型匹配)。当x < xp[0]时,返回该指定值,默认值为fp[0]。
right参数:可选,类型为浮点数或复数(需与fp类型匹配)。当x > xp[-1]时,返回该指定值,默认值为fp[-1]。
period参数:可选,类型为None或浮点数,用于指定横坐标的周期。此参数支持对角度坐标进行正确插值。若设定了period,则left和right参数将被忽略。
不同边界条件下的插值应用
场景一:插入点的横坐标位于原始数据横坐标范围内。
x = 2.5 # 要插入值的横坐标
xp = [1, 2, 3] # 要插入序列的横坐标
fp = [3, 2, 0] # 要插入序列的纵坐标
y = np.interp(x, xp, fp) # 返回插入值的纵坐标 1.0
plt.plot(xp, fp, '-o')
plt.plot(x, y, 'x')
plt.show()
场景二:插入点的横坐标位于原始数据横坐标范围之外(使用默认边界值)。
x = [0, 1, 1.5, 2.72, 3.14] # 左侧外部默认为原函数最左侧函数值,右侧默认为右侧
xp = [1, 2, 3]
fp = [3, 2, 0]
y = np.interp(x, xp, fp) # array([ 3. ,3. ,2.5 ,0.56, 0. ])
plt.plot(xp, fp, '-o')
plt.plot(x, y, 'x')
plt.show()
场景三:插入点的横坐标位于原始数据横坐标范围之外(自定义边界值)。
x = 3.14
xp = [1, 2, 3]
fp = [3, 2, 0]
UNDEF = -99.0
y = np.interp(x, xp, fp, right=UNDEF) # -99.0
plt.plot(xp, fp, '-o')
plt.plot(x, y, 'x')
plt.show()
场景四:正弦函数的周期插值。
x = np.linspace(0, 2 * np.pi, 10) # 在0到2pi的范围内均匀取10个点
y = np.sin(x) # sin函数x横坐标对应的y值
xvals = np.linspace(0, 2 * np.pi, 50) # 均匀取50个
yinterp = np.interp(xvals, x, y) # 在映射关系为y的x中插入xvals
plt.plot(x, y, 'o')
plt.plot(xvals, yinterp, '-x')
plt.show()
以上即为Numpy一维线性插值函数的完整用法介绍,供参考与支持。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









