Skip to main content
`Ctrl`+`K`

# scipy.interpolate.insert

scipy.interpolate.insert(x, tck, m=1, per=0)

  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.

    tck a `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.

    m int, optional

      The number of times to insert the given knot (its multiplicity). Default is 1.

    per int, 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) satisfying `t(k+1)<t(j)<=x` or at least k interior knots t(j) satisfying `x<=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

  `BSpline.insert_knot`

  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 particular `BSpline.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.])