Numpy一维线性插值函数interp详解与使用示例

Owen
Owen
发布时间:2026-10-13| 4人浏览过
原创

本文详细介绍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一维线性插值函数的完整用法介绍,供参考与支持。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。