scipy.interpolate.

LSQUnivariateSpline#

class scipy.interpolate.LSQUnivariateSpline(x, y, t, w=None, bbox=[None, None], k=3, ext=0, check_finite=False)[原始碼]#

具有顯式內部節點的 1-D 樣條。

舊版

此類別被視為舊版,將不再接收更新。雖然我們目前沒有移除它的計畫,但我們建議新的程式碼改用更現代的替代方案。具體來說,我們建議改用 make_lsq_spline

將 k 次樣條曲線 y = spl(x) 擬合到提供的 x, y 資料。t 指定樣條曲線的內部節點

參數:
x(N,) 類陣列

資料點的輸入維度 – 必須遞增

y(N,) 類陣列

資料點的輸入維度

t(M,) 類陣列

樣條曲線的內部節點。必須依升序排列且

bbox[0] < t[0] < ... < t[-1] < bbox[-1]
w(N,) 類陣列,選用

樣條曲線擬合的權重。必須為正數。如果為 None(預設值),則權重皆為 1。

bbox(2,) 類陣列,選用

指定近似區間邊界的 2 序列。如果為 None(預設值),bbox = [x[0], x[-1]]

kint,選用

平滑樣條曲線的次數。必須為 1 <= k <= 5。預設值為 k = 3,即三次樣條曲線。

extint 或 str,選用

控制未在節點序列定義的區間內的元素的外插模式。

  • 如果 ext=0 或 ‘extrapolate’,則傳回外插值。

  • 如果 ext=1 或 ‘zeros’,則傳回 0

  • 如果 ext=2 或 ‘raise’,則引發 ValueError

  • 如果 ext=3 或 ‘const’,則傳回邊界值。

預設值為 0。

check_finitebool,選用

是否檢查輸入陣列是否僅包含有限數字。停用可能會提高效能,但如果輸入包含無限或 NaN,可能會導致問題(崩潰、未終止或無意義的結果)。預設值為 False。

引發:
ValueError

如果內部節點不滿足 Schoenberg-Whitney 條件

另請參閱

UnivariateSpline

用於擬合給定資料點集的平滑單變量樣條曲線。

InterpolatedUnivariateSpline

用於給定資料點集的內插單變量樣條曲線。

splrep

用於查找一維曲線 B 樣條表示的函數

splev

用於評估 B 樣條或其導數的函數

sproot

用於查找三次 B 樣條根的函數

splint

用於評估給定兩點之間 B 樣條定積分的函數

spalde

用於評估 B 樣條所有導數的函數

註解

資料點的數量必須大於樣條曲線次數 k

節點 t 必須滿足 Schoenberg-Whitney 條件,即必須存在資料點 x[j] 的子集,使得 t[j] < x[j] < t[j+k+1],適用於 j=0, 1,...,n-k-2

範例

>>> import numpy as np
>>> from scipy.interpolate import LSQUnivariateSpline, UnivariateSpline
>>> import matplotlib.pyplot as plt
>>> rng = np.random.default_rng()
>>> x = np.linspace(-3, 3, 50)
>>> y = np.exp(-x**2) + 0.1 * rng.standard_normal(50)

使用預先定義的內部節點擬合平滑樣條曲線

>>> t = [-1, 0, 1]
>>> spl = LSQUnivariateSpline(x, y, t)
>>> xs = np.linspace(-3, 3, 1000)
>>> plt.plot(x, y, 'ro', ms=5)
>>> plt.plot(xs, spl(xs), 'g-', lw=3)
>>> plt.show()
../../_images/scipy-interpolate-LSQUnivariateSpline-1_00_00.png

檢查節點向量

>>> spl.get_knots()
array([-3., -1., 0., 1., 3.])

使用另一個樣條曲線的節點建構 lsq 樣條曲線

>>> x = np.arange(10)
>>> s = UnivariateSpline(x, x, s=0)
>>> s.get_knots()
array([ 0.,  2.,  3.,  4.,  5.,  6.,  7.,  9.])
>>> knt = s.get_knots()
>>> s1 = LSQUnivariateSpline(x, x, knt[1:-1])    # Chop 1st and last knot
>>> s1.get_knots()
array([ 0.,  2.,  3.,  4.,  5.,  6.,  7.,  9.])

方法

__call__(x[, nu, ext])

在位置 x 評估樣條曲線(或其 nu 階導數)。

antiderivative([n])

建構一個新的樣條曲線,表示此樣條曲線的反導數。

derivative([n])

建構一個新的樣條曲線,表示此樣條曲線的導數。

derivatives(x)

傳回樣條曲線在點 x 的所有導數。

get_coeffs()

傳回樣條曲線係數。

get_knots()

傳回樣條曲線內部節點的位置。

get_residual()

傳回樣條曲線近似值的平方殘差加權總和。

integral(a, b)

傳回給定兩點之間樣條曲線的定積分。

roots()

傳回樣條曲線的零點。

set_smoothing_factor(s)

使用給定的平滑因子 s 和上次呼叫中找到的節點繼續樣條曲線計算。

validate_input