scipy.interpolate.

make_splprep#

scipy.interpolate.make_splprep(x, *, w=None, u=None, ub=None, ue=None, k=3, s=0, t=None, nest=None)[來源]#

尋找參數化 N 維曲線的平滑 B-spline 表示法。

給定 N 個一維陣列的列表 x,代表由 u 參數化的 N 維空間中的曲線,尋找平滑逼近 spline 曲線 g(u)

參數:
xarray_like,形狀 (m, ndim)

代表 ndim 維度中曲線的取樣資料點。典型的用法是 1D 陣列的列表,每個長度為 m

warray_like,形狀 (m,),選用

嚴格正數的 1D 權重陣列。權重用於計算加權最小平方 spline 擬合。如果 x 值中的誤差具有由向量 d 給定的標準差,則 w 應為 1/d。預設值為 np.ones(m)

uarray_like,選用

參數形式中曲線的參數值陣列。如果未給定,這些值會根據以下方式自動計算

v[0] = 0
v[i] = v[i-1] + distance(x[i], x[i-1])
u[i] = v[i] / v[-1]
ub、uefloat,選用

參數區間的端點。預設為 u[0]u[-1]

kint,選用

spline 的次數。建議使用三次 spline,k=3。應避免偶數 k 值,尤其是在 s 值較小時。預設值為 k=3

sfloat,選用

平滑條件。平滑量取決於滿足以下條件

sum((w * (g(u) - x))**2) <= s,

其中 g(u)x 的平滑近似值。使用者可以使用 s 來控制擬合的緊密程度和平滑度之間的權衡。較大的 s 表示更多的平滑,而較小的 s 值表示更少的平滑。建議的 s 值取決於權重 w。如果權重代表 x 標準差的倒數,則良好的 s 值應在範圍 (m - sqrt(2*m), m + sqrt(2*m)) 內找到,其中 mxw 中的資料點數量。

tarray_like,選用

spline 節點。如果為 None(預設值),節點將自動建構。必須至少有 2*k + 2 且最多 m + k + 1 個節點。

nestint,選用

節點向量的目標長度。應介於 2*(k + 1)(次數為 k 的 spline 的最小節點數)和 m + k + 1(內插 spline 的節點數)之間。此常式傳回的實際節點數可能略大於 nest。預設值為 None(無限制,最多新增 m + k + 1 個節點)。

傳回值:
splBSpline 實例

對於 s=0spl(u) == x。對於非零值的 sspl 代表 x 的平滑近似值,通常節點較少。

undarray

參數的值

另請參閱

generate_knots

在幕後用於產生節點

make_splrep

此常式 1D 函數的類比

make_interp_spline

建構內插 spline (s = 0)

make_lsq_spline

建構給定節點向量的最小平方 spline

splprep

此常式的 FITPACK 類比

註解

給定一組 \(m\)\(D\) 維度中的資料點 \(\vec{x}_j\),其中 \(j=1, ..., m\)\(\vec{x}_j = (x_{j; 1}, ..., x_{j; D})\),此常式建構參數化 spline 曲線 \(g_a(u)\),其中 \(a=1, ..., D\),以最小化跳躍總和 \(D_{i; a}\),即內部節點 (\(u_b < t_i < u_e\)) 處 k 階導數的跳躍,其中

\[D_{i; a} = g_a^{(k)}(t_i + 0) - g_a^{(k)}(t_i - 0)\]

具體而言,此常式建構 spline 函數 \(g(u)\),其最小化

\[\sum_i \sum_{a=1}^D | D_{i; a} |^2 \to \mathrm{min}\]

前提是

\[\sum_{j=1}^m \sum_{a=1}^D (w_j \times (g_a(u_j) - x_{j; a}))^2 \leqslant s\]

其中 \(u_j\) 是對應於資料點 \((x_{j; 1}, ..., x_{j; D})\) 的參數值,而 \(s > 0\) 是輸入參數。

換句話說,我們平衡最大化平滑度(以導數的跳躍來衡量,第一個準則)以及 \(g(u_j)\) 與資料 \(x_j\) 的偏差(第二個準則)。

請注意,第二個準則中的總和遍及所有資料點,而第一個準則中的總和遍及內部 spline 節點(即 ub < t[i] < ue 的節點)。spline 節點通常是資料的子集,請參閱 generate_knots 以了解詳細資訊。

在 1.15.0 版本中新增。

參考文獻

[1]

P. Dierckx, “Algorithms for smoothing data with periodic and parametric splines, Computer Graphics and Image Processing”, 20 (1982) 171-184.

[2]

P. Dierckx, “Curve and surface fitting with splines”, Monographs on Numerical Analysis, Oxford University Press, 1993.