Skip to main content
`Ctrl`+`K`
scipy.interpolate.

# insert

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

  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 its `insert_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 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.

  Array API Standard Support

  `insert` is not in-scope for support of Python Array API Standard compatible backends other than NumPy.

  See Support for the array API standard for more information.

  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.])