本文簡要介紹 python 語言中 scipy.interpolate.make_lsq_spline
的用法。
用法:
scipy.interpolate.make_lsq_spline(x, y, t, k=3, w=None, axis=0, check_finite=True)#
計算基於 LSQ(最小二乘)的擬合 B-spline(的係數)。
結果是線性組合
B-spline 基本元素中的 ,它最小化
- x: 數組, 形狀 (m,)
橫坐標。
- y: 數組, 形狀 (m, ...)
縱坐標。
- t: 數組,形狀(n + k + 1,)。
結。結點和數據點必須滿足Schoenberg-Whitney 條件。
- k: 整數,可選
B-spline學位。默認為立方體,
k = 3
。- w: 數組,形狀 (m,),可選
樣條擬合的權重。必須是正的。如果
None
,則權重全部相等。默認為None
。- axis: 整數,可選
插值軸。默認為零。
- check_finite: 布爾型,可選
是否檢查輸入數組是否僅包含有限數。禁用可能會提高性能,但如果輸入確實包含無窮大或 NaN,則可能會導致問題(崩潰、非終止)。默認為真。
- b: 度為
k
且帶有結t
的 BSpline 對象。
- 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 >>> 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)
現在擬合帶有預定義內部結的平滑三次樣條。在這裏,我們通過添加邊界結來使結向量 (k+1)-regular:
>>> from scipy.interpolate import make_lsq_spline, BSpline >>> t = [-1, 0, 1] >>> k = 3 >>> t = np.r_[(x[0],)*(k+1), ... t, ... (x[-1],)*(k+1)] >>> spl = make_lsq_spline(x, y, t, k)
為了比較,我們還為同一組數據構建了一個插值樣條曲線:
>>> from scipy.interpolate import make_interp_spline >>> spl_i = make_interp_spline(x, y)
繪製兩者:
>>> xs = np.linspace(-3, 3, 100) >>> plt.plot(x, y, 'ro', ms=5) >>> plt.plot(xs, spl(xs), 'g-', lw=3, label='LSQ spline') >>> plt.plot(xs, spl_i(xs), 'b-', lw=3, alpha=0.7, label='interp spline') >>> plt.legend(loc='best') >>> plt.show()
NaN 處理:如果輸入數組包含
nan
值,結果沒有用,因為底層樣條擬合例程無法處理nan
.一種解決方法是對not-a-number 數據點使用零權重:>>> y[8] = np.nan >>> w = np.isnan(y) >>> y[w] = 0. >>> tck = make_lsq_spline(x, y, t, w=~w)
請注意,需要用數值替換
nan
(隻要相應的權重為零,精確值無關緊要。)
相關用法
- Python SciPy interpolate.make_interp_spline用法及代碼示例
- Python SciPy interpolate.make_smoothing_spline用法及代碼示例
- Python SciPy interpolate.krogh_interpolate用法及代碼示例
- Python SciPy interpolate.InterpolatedUnivariateSpline用法及代碼示例
- Python SciPy interpolate.BSpline用法及代碼示例
- Python SciPy interpolate.LSQSphereBivariateSpline用法及代碼示例
- Python SciPy interpolate.griddata用法及代碼示例
- Python SciPy interpolate.splder用法及代碼示例
- Python SciPy interpolate.LinearNDInterpolator用法及代碼示例
- Python SciPy interpolate.PPoly用法及代碼示例
- Python SciPy interpolate.NdBSpline用法及代碼示例
- Python SciPy interpolate.pade用法及代碼示例
- Python SciPy interpolate.barycentric_interpolate用法及代碼示例
- Python SciPy interpolate.RegularGridInterpolator用法及代碼示例
- Python SciPy interpolate.NdPPoly用法及代碼示例
- Python SciPy interpolate.interp2d用法及代碼示例
- Python SciPy interpolate.approximate_taylor_polynomial用法及代碼示例
- Python SciPy interpolate.RectSphereBivariateSpline用法及代碼示例
- Python SciPy interpolate.sproot用法及代碼示例
- Python SciPy interpolate.splantider用法及代碼示例
- Python SciPy interpolate.CloughTocher2DInterpolator用法及代碼示例
- Python SciPy interpolate.interp1d用法及代碼示例
- Python SciPy interpolate.BPoly用法及代碼示例
- Python SciPy interpolate.BarycentricInterpolator用法及代碼示例
- Python SciPy interpolate.splrep用法及代碼示例
注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.interpolate.make_lsq_spline。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。