scipy.interpolate.

splprep#

scipy.interpolate.splprep(x, w=None, u=None, ub=None, ue=None, k=3, task=0, s=None, t=None, full_output=0, nest=None, per=0, quiet=1)[原始碼]#

尋找 N 維曲線的 B 樣條表示法。

舊版

此函數被視為舊版,將不再接收更新。雖然我們目前沒有移除它的計畫,但我們建議新程式碼改用更現代的替代方案。特別是,我們建議在新程式碼中使用 make_splprep

給定 N 個 rank-1 陣列的列表 x,代表 N 維空間中由 u 參數化的曲線,找到平滑的近似樣條曲線 g(u)。使用來自 FITPACK 的 FORTRAN 常式 parcur。

參數:
xarray_like

代表曲線的樣本向量陣列列表。

warray_like, optional

嚴格正的 rank-1 權重陣列,長度與 x[0] 相同。權重用於計算加權最小平方樣條擬合。如果 x 值中的誤差具有由向量 d 給定的標準差,則 w 應為 1/d。預設值為 ones(len(x[0]))

uarray_like, optional

參數值陣列。如果未給定,這些值會自動計算為 M = len(x[0]),其中

v[0] = 0

v[i] = v[i-1] + distance(x[i], x[i-1])

u[i] = v[i] / v[M-1]

ub, ueint, optional

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

kint, optional

樣條的次數。建議使用三次樣條。應避免使用偶數的 k,尤其是在 s 值較小的情況下。1 <= k <= 5,預設值為 3。

taskint, optional

如果 task==0(預設值),則尋找給定平滑因子 s 的 t 和 c。如果 task==1,則尋找另一個平滑因子 s 值的 t 和 c。對於相同的資料集,必須先呼叫 task=0 或 task=1。如果 task==-1,則尋找給定節點集 t 的加權最小平方樣條。

sfloat, optional

平滑條件。平滑量取決於滿足以下條件:sum((w * (y - g))**2,axis=0) <= s,其中 g(x) 是 (x,y) 的平滑內插。使用者可以使用 s 來控制擬合的緊密度和平滑度之間的權衡。較大的 s 表示更多的平滑,而較小的 s 值表示較少的平滑。s 的建議值取決於權重 w。如果權重代表 y 的標準差倒數,則良好的 s 值應在 (m-sqrt(2*m),m+sqrt(2*m)) 範圍內找到,其中 m 是 x、y 和 w 中的資料點數。

tarray, optional

用於 task=-1 的節點。必須至少有 2*k+2 個節點。

full_outputint, optional

如果非零,則傳回選用輸出。

nestint, optional

樣條節點總數的過高估計值,以幫助確定儲存空間。預設情況下,nest=m/2。總是足夠大的 nest=m+k+1。

perint, optional

如果非零,則資料點被視為週期性的,週期為 x[m-1] - x[0],並傳回平滑週期性樣條近似值。不使用 y[m-1]w[m-1] 的值。

quietint, optional

非零值可抑制訊息。

傳回值:
tcktuple

一個元組 (t,c,k),包含節點向量、B 樣條係數和樣條次數。

uarray

參數值的陣列。

fpfloat

樣條近似值的加權平方殘差和。

ierint

關於 splrep 成功的整數旗標。如果 ier<=0,則表示成功。如果 ier 在 [1,2,3] 中,則發生錯誤但未引發。否則會引發錯誤。

msgstr

與整數旗標 ier 對應的訊息。

註解

有關樣條及其導數的評估,請參閱 splev。維度 N 的數量必須小於 11。

c 陣列中的係數數量比節點數量 len(t)k+1 個。這與 splrep 相反,後者會將係數陣列填零以使其長度與節點陣列相同。這些額外的係數會被評估常式 splevBSpline 忽略。

參考文獻

[1]

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

[2]

P. Dierckx, “Algorithms for smoothing data with periodic and parametric splines”, report tw55, Dept. Computer Science, K.U.Leuven, 1981.

[3]

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

範例

在極座標中產生蚶線曲線的離散化

>>> import numpy as np
>>> phi = np.linspace(0, 2.*np.pi, 40)
>>> r = 0.5 + np.cos(phi)         # polar coords
>>> x, y = r * np.cos(phi), r * np.sin(phi)    # convert to cartesian

並進行內插

>>> from scipy.interpolate import splprep, splev
>>> tck, u = splprep([x, y], s=0)
>>> new_points = splev(u, tck)

請注意,(i) 我們透過使用 s=0 來強制內插,(ii) 參數化 u 是自動產生的。現在繪製結果

>>> import matplotlib.pyplot as plt
>>> fig, ax = plt.subplots()
>>> ax.plot(x, y, 'ro')
>>> ax.plot(new_points[0], new_points[1], 'r-')
>>> plt.show()
../../_images/scipy-interpolate-splprep-1.png