scipy.interpolate.

InterpolatedUnivariateSpline#

class scipy.interpolate.InterpolatedUnivariateSpline(x, y, w=None, bbox=[None, None], k=3, ext=0, check_finite=False)[源码]#

用于给定数据集的一维插值样条。

遗留

此类被视为遗留类,将不再接收更新。虽然我们目前没有删除它的计划,但我们建议新代码使用更现代的替代方案。具体来说,我们建议改用 make_interp_spline

k 次样条函数 y = spl(x) 拟合到提供的 x, y 数据。样条函数通过所有提供的点。等同于 UnivariateSplines = 0。

参数:
x(N,) 数组类对象

数据点的输入维度 – 必须严格递增

y(N,) 数组类对象

数据点的输入维度

w(N,) 数组类对象, 可选

样条拟合的权重。必须为正。如果为 None(默认),则所有权重均为 1。

bbox(2,) 数组类对象, 可选

指定逼近区间边界的2元序列。如果为 None(默认),则 bbox=[x[0], x[-1]]

kint, 可选

平滑样条的度数。必须是 1 <= k <= 5。默认值为 k = 3,即三次样条。

extint 或 str, 可选

控制不位于节点序列定义区间内的元素的外推模式。

  • 如果 ext=0 或 ‘extrapolate’,则返回外推值。

  • 如果 ext=1 或 ‘zeros’,则返回 0

  • 如果 ext=2 或 ‘raise’,则抛出 ValueError

  • 如果 ext=3 或 ‘const’,则返回边界值。

默认值为 0。

check_finitebool, 可选

是否检查输入数组仅包含有限数字。禁用此项可能会提高性能,但如果输入包含无穷大或 NaN,则可能导致问题(崩溃、无法终止或不合理的结果)。默认值为 False。

方法

__call__(x[, nu, ext])

在位置 x 处评估样条(或其 nu 阶导数)。

antiderivative([n])

构造一个表示此样条反导数的新样条。

derivative([n])

构造一个表示此样条导数的新样条。

derivatives(x)

返回样条在点 x 处的所有导数。

get_coeffs()

返回样条系数。

get_knots()

返回样条内部节点的坐标。

get_residual()

返回样条逼近的平方残差加权和。

integral(a, b)

返回样条在两个给定点之间的定积分。

roots()

返回样条的零点。

set_smoothing_factor(s)

使用给定的平滑因子 s 和上次调用时找到的节点继续样条计算。

validate_input

另请参阅

UnivariateSpline

一个平滑的单变量样条,用于拟合给定数据集。

LSQUnivariateSpline

一个由用户选择节点的样条

SmoothBivariateSpline

一个通过给定点的平滑二元样条

LSQBivariateSpline

一个使用加权最小二乘拟合的二元样条

splrep

一个用于查找一维曲线的B样条表示的函数

splev

一个用于评估B样条或其导数的函数

sproot

一个用于查找三次B样条根的函数

splint

一个用于评估B样条在两个给定点之间的定积分的函数

spalde

一个用于评估B样条所有导数的函数

注释

数据点的数量必须大于样条的度数 k

示例

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> from scipy.interpolate import InterpolatedUnivariateSpline
>>> rng = np.random.default_rng()
>>> x = np.linspace(-3, 3, 50)
>>> y = np.exp(-x**2) + 0.1 * rng.standard_normal(50)
>>> spl = InterpolatedUnivariateSpline(x, y)
>>> plt.plot(x, y, 'ro', ms=5)
>>> xs = np.linspace(-3, 3, 1000)
>>> plt.plot(xs, spl(xs), 'g', lw=3, alpha=0.7)
>>> plt.show()
../../_images/scipy-interpolate-InterpolatedUnivariateSpline-1_00_00.png

请注意 spl(x) 会对 y 进行插值

>>> spl.get_residual()
0.0