本文简要介绍 python 语言中 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-D 曲线的B-spline 表示。
给定一个 N 阶 1 数组 x(表示由 u 参数化的 N 维空间中的曲线)的列表,找到一条平滑的近似样条曲线 g(u)。使用 FITPACK 中的 FORTRAN 例程 parcur。
- x: array_like
表示曲线的样本向量数组列表。
- w: 数组,可选
严格为正的 rank-1 权重数组,其长度与x[0]。权重用于计算加权最小二乘样条拟合。如果错误在x值具有由向量 d 给出的标准偏差,则w应该是 1/d。默认为
ones(len(x[0]))
.- u: 数组,可选
一组参数值。如果未给出,这些值将自动计算为
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, ue: 整数,可选
参数区间的端点。默认为 u[0] 和 u[-1]。
- k: 整数,可选
样条曲线的度数。建议使用三次样条。偶数的值k应避免使用小s-value。
1 <= k <= 5
, 默认为 3。- task: 整数,可选
如果 task==0(默认),为给定的平滑因子 s 找到 t 和 c。如果 task==1,则为平滑因子 s 的另一个值找到 t 和 c。对于同一组数据,之前必须有一个 task=0 或 task=1 的调用。如果 task=-1 找到给定节点集 t 的加权最小二乘样条。
- s: 浮点数,可选
平滑条件。通过满足以下条件确定平滑度:
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 中的数据点数。- t: 数组,可选
task=-1
所需的结。必须至少有2*k+2
结。- full_output: 整数,可选
如果非零,则返回可选输出。
- nest: 整数,可选
样条的总结数的over-estimate,以帮助确定存储空间。默认嵌套=m/2。总是足够大的是nest=m+k+1。
- per: 整数,可选
如果非零,则将数据点视为周期为
x[m-1] - x[0]
的周期性数据点,并返回平滑的周期性样条近似。不使用y[m-1]
和w[m-1]
的值。- quiet: 整数,可选
非零抑制消息。
- tck: 元组
一个元组
(t,c,k)
包含结向量、B-spline 系数和样条曲线的阶数。- u: 数组
参数值的数组。
- fp: 浮点数
样条近似的残差平方和的加权和。
- ier: int
关于 splrep 成功的整数标志。如果 ier<=0,则表示成功。如果 ier 在 [1,2,3] 中发生错误但未引发错误。否则会引发错误。
- msg: str
与整数标志 ier 对应的消息。
参数 ::
返回 ::
注意:
请参阅
splev
以评估样条及其导数。维数 N 必须小于 11。系数的个数c数组是
k+1
小于结数,len(t)
.这与scipy.interpolate.splrep,其中 zero-pads 系数数组与节点数组具有相同的长度。这些附加系数被评估程序忽略,splev
和scipy.interpolate.BSpline.参考:
[1]P. Dierckx,“用周期性和参数样条曲线平滑数据的算法,计算机图形学和图像处理”,20 (1982) 171-184。
[2]P. Dierckx,“使用周期性和参数样条曲线平滑数据的算法”,报告 tw55,计算机科学系,K.U.Leuven,1981 年。
[3]P. Dierckx,“用样条拟合曲线和曲面”,数值分析专着,牛津大学出版社,1993 年。
例子:
在极坐标中生成一个 limacon 曲线的离散化:
>>> 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()
相关用法
- Python SciPy interpolate.splder用法及代码示例
- Python SciPy interpolate.splantider用法及代码示例
- Python SciPy interpolate.splrep用法及代码示例
- Python SciPy interpolate.sproot用法及代码示例
- Python SciPy interpolate.make_interp_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.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.CloughTocher2DInterpolator用法及代码示例
- Python SciPy interpolate.interp1d用法及代码示例
- Python SciPy interpolate.BPoly用法及代码示例
- Python SciPy interpolate.BarycentricInterpolator用法及代码示例
- Python SciPy interpolate.make_smoothing_spline用法及代码示例
注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.interpolate.splprep。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。