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 至提供的 x , y 数据。 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()
方法:
__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