scipy.interpolate.UnivariateSpline

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

一维平滑样条拟合到给定的数据点集合。

拟合次数为y=spl(X)的样条曲线 k 至提供的 xy 数据。 s 通过指定平滑条件指定结的数量。

参数
x(n,)类似数组

独立输入数据的一维阵列。必须是递增的;必须是严格递增的,如果 s 是0。

y(n,)类似数组

相关输入数据的一维数组,长度与 x

w(n,)array_like,可选

样条曲线拟合的权重。一定是阳性的。如果 w 为无,则权重都相等。默认值为None。

bbox(2,)array_like,可选

2-指定近似间隔边界的序列。如果 bbox 是没有的, bbox=[x[0], x[-1]] 。默认值为None。

k整型,可选

平滑样条曲线的阶数。必须是1<= k <=5。 k = 3 是一条三次样条曲线。默认值为3。

s浮动或无,可选

用于选择结数的正平滑因子。将增加结的数量,直到满足平滑条件:

sum((w[i] * (y[i]-spl(x[i])))**2, axis=0) <= s

如果 s 是没有的, s = len(w) 在以下情况下,这应该是一个很好的值 1/w[i] 是对的标准差的估计 y[i] 。如果为0,样条线将插值通过所有数据点。默认值为None。

extint或str,可选

控制不在节点序列定义的间隔内的元素的外推模式。

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

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

  • 如果ext=2或‘RAISE’,则引发ValueError

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

默认值为0。

check_finite布尔值,可选

是否检查输入数组是否仅包含有限数字。禁用可能会提高性能,但如果输入确实包含无穷大或NAN,则可能会导致问题(崩溃、非终止或无意义的结果)。默认值为False。

参见

BivariateSpline

二元样条的基类。

SmoothBivariateSpline

一种通过给定点的光顺二元样条

LSQBivariateSpline

基于加权最小二乘拟合的二元样条

RectSphereBivariateSpline

球面上矩形网格上的二元样条

SmoothSphereBivariateSpline

球坐标下的光顺二元样条

LSQSphereBivariateSpline

球坐标下加权最小二乘拟合的二元样条

RectBivariateSpline

矩形网格上的二元样条

InterpolatedUnivariateSpline

一组给定数据点的一元插值样条。

bisplrep

求曲面的二元B样条表示的函数

bisplev

二元B样条及其导数的一个求值函数

splrep

求一维曲线B样条表示的函数

splev

求B样条或其导数的函数

sproot

三次B样条的求根函数

splint

求两点间B样条定积分的一个函数

spalde

求B样条所有导数的一个函数

注意事项

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

NaN处理 :如果输入数组包含 nan 值,则结果是没有用的,因为底层样条拟合例程无法处理 nan 。解决方法是对非数字数据点使用零权重:

>>> from scipy.interpolate import UnivariateSpline
>>> x, y = np.array([1, 2, 3, 4]), np.array([1, np.nan, 3, 4])
>>> w = np.isnan(y)
>>> y[w] = 0.
>>> spl = UnivariateSpline(x, y, w=~w)

请注意,需要将 nan 通过一个数值(只要相应的权重为零,精确值就无关紧要。)

示例

>>> import matplotlib.pyplot as plt
>>> from scipy.interpolate import UnivariateSpline
>>> rng = np.random.default_rng()
>>> x = np.linspace(-3, 3, 50)
>>> y = np.exp(-x**2) + 0.1 * rng.standard_normal(50)
>>> plt.plot(x, y, 'ro', ms=5)

使用平滑参数的默认值:

>>> spl = UnivariateSpline(x, y)
>>> xs = np.linspace(-3, 3, 1000)
>>> plt.plot(xs, spl(xs), 'g', lw=3)

手动更改平滑量:

>>> spl.set_smoothing_factor(0.5)
>>> plt.plot(xs, spl(xs), 'b', lw=3)
>>> plt.show()
../../_images/scipy-interpolate-UnivariateSpline-1.png

方法:

__call__ \(X[, nu, ext] )

计算位置x处的样条线(或其第n阶导数)。

antiderivative \([n] )

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

derivative \([n] )

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

derivatives \(X)

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

get_coeffs \()

返回样条系数。

get_knots \()

返回样条线内部节点的位置。

get_residual \()

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

integral \(a,b)

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

roots \()

返回样条曲线的零。

set_smoothing_factor \(s)

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

validate_input