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))
內找到,其中m
是x
和w
中的資料點數量。- 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
個節點)。
- 傳回值:
- spl
BSpline
實例 對於 s=0,
spl(u) == x
。對於非零值的s
,spl 代表x
的平滑近似值,通常節點較少。- undarray
參數的值
- spl
另請參閱
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.