scipy.interpolate.

insert#

scipy.interpolate.insert(x, tck, m=1, per=0)[source]#

插入 B 样条线中的结点。

给定 B 样条线表示的结点和系数,在点 x 处插入一个结点 m 次,创建一个新的 B 样条线。这是用于 FITPACK 的 FORTRAN 程序 insert 的包装器。

参数:
x (u)float

要插入新结点的结点值。如果 tck 是从 splprep 返回的,则应该提供参数值 u。

tck一个 BSpline 实例或一个元组

如果为元组,则它应该是包含结点向量、B 样条线系数和样条线次数的元组 (t,c,k)。

mint,可选

插入给定结点(它的重数)的次数。默认值为 1。

perint,可选

如果不为零,则输入样条线被认为是周期性的。

返回值:
BSpline 实例或一个元组

具有结点 t、系数 c 和度 k 的新的 B 样条。t(k+1) <= x <= t(n-k),其中 k 是样条的度。在周期样条 (per != 0) 的情况下,必须至少有 k 个内部结点 t(j) 满足 t(k+1)<t(j)<=x 或至少有 k 个内部结点 t(j) 满足 x<=t(j)<t(n-k)。仅在输入参数 tck 是一个元组时才返回元组,否则会构造 B 样条对象并返回。

另请参见

BSpline.insert_knot

注释

基于 [1][2] 中的算法。

不建议直接操作 tck 元组。在新代码中,最好使用 BSpline 对象,特别是 BSpline.insert_knot 方法。

参考

[1]

W. Boehm,“在 b 样条曲线中插入新结点”。计算机辅助设计,12, 第 199-201 页,1980 年。

[2]

P. Dierckx,“使用样条曲线和曲面拟合,数值分析专论”,牛津大学出版社,1993 年。

示例

您可以在 B 样条中插入结点。

>>> from scipy.interpolate import splrep, insert
>>> import numpy as np
>>> x = np.linspace(0, 10, 5)
>>> y = np.sin(x)
>>> tck = splrep(x, y)
>>> tck[0]
array([ 0.,  0.,  0.,  0.,  5., 10., 10., 10., 10.])

已插入一个结点

>>> tck_inserted = insert(3, tck)
>>> tck_inserted[0]
array([ 0.,  0.,  0.,  0.,  3.,  5., 10., 10., 10., 10.])

已插入一些结点

>>> tck_inserted2 = insert(8, tck, m=3)
>>> tck_inserted2[0]
array([ 0.,  0.,  0.,  0.,  5.,  8.,  8.,  8., 10., 10., 10., 10.])