当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。