scipy.interpolate.BSpline.insert_knot#
- BSpline.insert_knot(x, m=1)[source]#
Insert a new knot at x of multiplicity m.
Given the knots and coefficients of a B-spline representation, create a new B-spline with a knot inserted m times at point x.
- Parameters:
- xfloat
The position of the new knot
- mint, optional
The number of times to insert the given knot (its multiplicity). Default is 1.
- Returns:
- splBSpline object
A new BSpline object with the new knot inserted.
See also
Notes
Based on algorithms from [1] and [2].
In case of a periodic spline (
self.extrapolate == "periodic"
) there must be either at least k interior knots t(j) satisfyingt(k+1)<t(j)<=x
or at least k interior knots t(j) satisfyingx<=t(j)<t(n-k)
.This routine is functionally equivalent to
scipy.interpolate.insert
.Added in version 1.13.
References
[1]W. Boehm, “Inserting new knots into b-spline curves.”, Computer Aided Design, 12, p.199-201, 1980. DOI:10.1016/0010-4485(80)90154-2.
[2]P. Dierckx, “Curve and surface fitting with splines, Monographs on Numerical Analysis”, Oxford University Press, 1993.
Examples
You can insert knots into a B-spline:
>>> import numpy as np >>> from scipy.interpolate import BSpline, make_interp_spline >>> x = np.linspace(0, 10, 5) >>> y = np.sin(x) >>> spl = make_interp_spline(x, y, k=3) >>> spl.t array([ 0., 0., 0., 0., 5., 10., 10., 10., 10.])
Insert a single knot
>>> spl_1 = spl.insert_knot(3) >>> spl_1.t array([ 0., 0., 0., 0., 3., 5., 10., 10., 10., 10.])
Insert a multiple knot
>>> spl_2 = spl.insert_knot(8, m=3) >>> spl_2.t array([ 0., 0., 0., 0., 5., 8., 8., 8., 10., 10., 10., 10.])