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样条表示。
给定N个秩-1阵列的列表, x ,它表示N-D空间中的一条曲线,该曲线由 u ,求出一条光滑逼近的样条曲线g。 (u )。使用FITPACK中的FORTRAN例程parcur。
- 参数
- xarray_like
表示曲线的示例向量数组列表。
- wARRAY_LIKE,可选
长度与相同的权重的严格正秩数组 x[0] 。权重用于计算加权最小二乘样条拟合。如果 x 值具有由向量d给定的标准差,则 w 应为1/d。默认值为
ones(len(x[0]))
。- uARRAY_LIKE,可选
参数值的数组。如果未指定,这些值将自动计算为
M = len(x[0])
,在哪里V [0] =0
V [i] =v [i-1] +距离 (x[i] , x[i-1] )
使用 [i] =v [i] /v [M-1]
- UB,UE整型,可选
参数区间的端点。默认为使用 [0] 和使用 [-1] 。
- k整型,可选
样条曲线的阶数。建议使用三次样条曲线。的偶数值 k 应该避免,特别是在s值较小的情况下。
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整型,可选
任务所需的节点=-1。
- full_output整型,可选
如果非零,则返回可选输出。
- nest整型,可选
过高估计样条曲线的总节点数,以帮助确定存储空间。默认情况下,Nest=m/2。Nest=m+k+1总是足够大。
- per整型,可选
如果不是零,则数据点被认为是带有周期的周期性数据点
x[m-1] - x[0]
并返回光滑的周期样条逼近。的值y[m-1]
和w[m-1]
都没有用过。- quiet整型,可选
非零表示隐藏消息。此参数已弃用;请改用标准Python警告筛选器。
- 退货
- tck元组
(t,c,k)包含节点向量、B样条系数和样条曲线阶数的元组。
- u阵列
参数值的数组。
- fp浮动
样条近似的残差平方加权和。
- ier集成
关于拆分成功的整数标志。如果ier<=0,则表示成功。如果在以下位置 [1,2,3] 出现错误,但未引发。否则将引发错误。
- msg应力
对应于整数标志Ier的消息。
参见
注意事项
看见
splev
用于计算样条及其导数。维度数N必须小于11。中的系数数 c 数组为
k+1
少于结的数量,len(t)
。这与splrep
它将系数数组填零,使其具有与节点数组相同的长度。这些附加系数被评估例程忽略,splev
和BSpline
。参考文献
- 1
P.Dierckx,“用周期样条和参数样条平滑数据的算法,计算机图形学和图像处理”,20(1982)171-184。
- 2
P.Dierckx,“使用周期样条和参数样条平滑数据的算法”,报告TW55,DEP.计算机科学,鲁汶大学出版社,1981。
- 3
P.Dierckx,“用样条拟合曲线和曲面”,“数值分析专著”,牛津大学出版社,1993。
示例
在极坐标中生成Limacon曲线的离散化:
>>> 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()