cupyx.scipy.interpolate.make_lsq_spline(x, y, t, k=3, w=None, axis=0, check_finite=True, *, method='qr')[source]#

Construct a BSpline via an LSQ (Least SQuared) fit.

The result is a linear combination

\[S(x) = \sum_j c_j B_j(x; t)\]

of the B-spline basis elements, \(B_j(x; t)\), which minimizes

\[\sum_{j} \left( w_j \times (S(x_j) - y_j) \right)^2\]
  • x (array_like, shape (m,)) – Abscissas.

  • y (array_like, shape (m, ...)) – Ordinates.

  • t (array_like, shape (n + k + 1,).) – Knots. Knots and data points must satisfy Schoenberg-Whitney conditions.

  • k (int, optional) – B-spline degree. Default is cubic, k = 3.

  • w (array_like, shape (m,), optional) – Weights for spline fitting. Must be positive. If None, then weights are all equal. Default is None.

  • axis (int, optional) – Interpolation axis. Default is zero.

  • check_finite (bool, optional) – Whether to check that the input arrays contain only finite numbers. Disabling may give a performance gain, but may result in problems (crashes, non-termination) if the inputs do contain infinities or NaNs. Default is True.



Return type:

a BSpline object of the degree k with knots t.

See also



base class representing the B-spline objects


a similar factory function for interpolating splines


The number of data points must be larger than the spline degree k. Knots t must satisfy the Schoenberg-Whitney conditions, i.e., there must be a subset of data points x[j] such that t[j] < x[j] < t[j+k+1], for j=0, 1,...,n-k-2.