scipy.interpolate.insert#
- scipy.interpolate.insert(x, tck, m=1, per=0)[source]#
Insert knots into a B-spline.
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.])