insert#
- scipy.interpolate.insert(x, tck, m=1, per=0)[source]#
Insert knots into a B-spline.
Legacy
This function is considered legacy and will no longer receive updates. While we currently have no plans to remove it, we recommend that new code uses more modern alternatives instead. Specifically, we recommend constructing a
BSpline
object and using itsinsert_knot
method.Given the knots and coefficients of a B-spline representation, create a new B-spline with a knot inserted m times at point x. This is a wrapper around the FORTRAN routine insert of FITPACK.
- Parameters:
- x (u)float
A knot value at which to insert a new knot. If tck was returned from
splprep
, then the parameter values, u should be given.- tcka
BSpline
instance or a tuple If tuple, then it is expected to be a tuple (t,c,k) containing the vector of knots, the B-spline coefficients, and the degree of the spline.
- mint, optional
The number of times to insert the given knot (its multiplicity). Default is 1.
- perint, optional
If non-zero, the input spline is considered periodic.
- Returns:
- BSpline instance or a tuple
A new B-spline with knots t, coefficients c, and degree k.
t(k+1) <= x <= t(n-k)
, where k is the degree of the spline. In case of a periodic spline (per != 0
) 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)
. A tuple is returned iff the input argument tck is a tuple, otherwise a BSpline object is constructed and returned.
See also
Notes
Based on algorithms from [1] and [2].
Manipulating the tck-tuples directly is not recommended. In new code, prefer using the
BSpline
objects, in particularBSpline.insert_knot
method.References
[1]W. Boehm, “Inserting new knots into b-spline curves.”, Computer Aided Design, 12, p.199-201, 1980.
[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.
>>> from scipy.interpolate import splrep, insert >>> import numpy as np >>> x = np.linspace(0, 10, 5) >>> y = np.sin(x) >>> tck = splrep(x, y) >>> tck[0] array([ 0., 0., 0., 0., 5., 10., 10., 10., 10.])
A knot is inserted:
>>> tck_inserted = insert(3, tck) >>> tck_inserted[0] array([ 0., 0., 0., 0., 3., 5., 10., 10., 10., 10.])
Some knots are inserted:
>>> tck_inserted2 = insert(8, tck, m=3) >>> tck_inserted2[0] array([ 0., 0., 0., 0., 5., 8., 8., 8., 10., 10., 10., 10.])