當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python SciPy PPoly.from_spline用法及代碼示例


本文簡要介紹 python 語言中 scipy.interpolate.PPoly.from_spline 的用法。

用法:

classmethod  PPoly.from_spline(tck, extrapolate=None)#

從樣條構造分段多項式

參數

tck

樣條曲線,由 splrep 或 BSpline 對象返回。

extrapolate bool 或 ‘periodic’,可選

如果是布爾值,則確定是根據第一個和最後一個間隔外推到越界點,還是返回 NaN。如果‘periodic’,使用周期性外推。默認為真。

例子

構造插值樣條並將其轉換為 PPoly 實例

>>> import numpy as np
>>> from scipy.interpolate import splrep, PPoly
>>> x = np.linspace(0, 1, 11)
>>> y = np.sin(2*np.pi*x)
>>> tck = splrep(x, y, s=0)
>>> p = PPoly.from_spline(tck)
>>> isinstance(p, PPoly)
True

請注意,此函數僅支持開箱即用的一維樣條線。

如果 tck 對象表示參數樣條線(例如由 splprep BSpline c.ndim > 1 構造),則需要手動循環尺寸。

>>> from scipy.interpolate import splprep, splev
>>> t = np.linspace(0, 1, 11)
>>> x = np.sin(2*np.pi*t)
>>> y = np.cos(2*np.pi*t)
>>> (t, c, k), u = splprep([x, y], s=0)

請注意,c 是兩個長度為 11 的數組的列表。

>>> unew = np.arange(0, 1.01, 0.01)
>>> out = splev(unew, (t, c, k))

為了將此樣條轉換為冪基,我們將 b-spline 係數列表的每個分量 c 轉換為相應的三次多項式。

>>> polys = [PPoly.from_spline((t, cj, k)) for cj in c]
>>> polys[0].c.shape
(4, 14)

請注意多項式的係數多聚體都在冪基中,它們的維數正好反映了這一點:這裏 4 是階(度+1),14 是間隔數——這隻不過是原始結數組的長度tck減一。

或者,我們可以沿著第三個維度將組件堆疊到單個 PPoly 中:

>>> cc = np.dstack([p.c for p in polys])    # has shape = (4, 14, 2)
>>> poly = PPoly(cc, polys[0].x)
>>> np.allclose(poly(unew).T,     # note the transpose to match `splev`
...             out, atol=1e-15)
True

相關用法


注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.interpolate.PPoly.from_spline。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。