Scipy 教程-SciPy 插值
插值被定义为在直线或曲线上两点之间找到一个值。单词的第一部分 "inter" 意味着 "进入",这提示我们要查看数据内部。换句话说,"在精确数据点之间估计中间值称为插值"。在统计学、科学和商业中,或者当需要预测存在于两个现有数据点之间的值时,插值非常有用。
import numpy as npfrom scipy import interpolateimport matplotlib.pyplot as pltx = np.linspace(0, 5, 10)y = np.cos(x**2/3+4)print(x,y)
这将以数组形式给出以下输出。np.linspace() 函数返回给定数字之间的间隔。
[0. 0.55555556 1.11111111 1.66666667 2.22222222 2.777777783.33333333 3.88888889 4.44444444 5.][-0.65364362 -0.57246439 -0.29634775 0.21191783 0.80382736 0.958577460.14971294 -0.92731369 -0.39972072 0.97296947]
import numpy as npfrom scipy import interpolateimport matplotlib.pyplot as pltx = np.linspace(0, 5, 10)y = np.cos(x**2/3+4)plt.plot(x,y,'r')plt.show()
输出:
👉点击领取:最全Python资料合集
一维插值
scipy.interpolation 提供 interp1d 类,这是一种基于固定数据点创建函数的有用方法。
import numpy as npfrom scipy.interpolate import interp1dimport matplotlib.pyplot as pltfun1 = interp1d(x, y,kind = 'linear')fun2 = interp1d(x, y, kind = 'cubic')xnew = np.linspace(0, 4,30)plt.plot(x, y, 'o', xnew, fun1(xnew), '-', xnew, fun2(xnew), '--')plt.legend(['data', 'linear', 'cubic','nearest'], loc = 'best')plt.show()
输出:
在上述程序中,我们创建了两个函数 fun1 和 fun2。变量 x 包含样本点,变量 y 包含相应的值。第三个变量 kind 表示插值技术的类型。有多种插值方法。这些方法包括:
线性
最近邻
零
S-线性
二次
三次
样条
样条是用于通过指定的一组点生成平滑曲线的柔性带。样条插值需要两个基本步骤。在第一步中,计算曲线的样条表示;在第二步中,在所需点评估样条。
有两种方法表示曲线。首先,直接样条方法使用函数 splrep() 在二维平面上找到曲线的样条表示。默认的样条顺序是三次的,但可以通过输入关键字 k 进行更改。
splprep() 允许我们在 N 维空间中 参数化 定义曲线。关键字参数用于指定在样条拟合期间执行的平滑量。
标准输出是一个三元组 (t, c, k),其中 t 表示结点,c 表示系数,k 表示样条的阶。
单变量样条
scipy.interpolate.UnivariateSpline(x, y, w = None, bbox = [None, None], k = 3, s = None, ext = 0, check_finite = False).
参数-
w- 指定用于样条拟合的权重。必须是正的。
s- 通过指定平滑条件来指定结点(点)的数量。
k- 表示平滑样条的度数。必须满足 k <= 5。默认情况下,k = 3,即三次样条。
Ext
控制由结点序列定义的间隔外元素的外推模式。
如果 ext = 0 或 'extrapolate',返回外推值。
如果 ext = 1 或 'zero',返回 0
如果 ext = 2 或 'raise',引发 ValueError
如果 ext = 3 或 'const',返回边界值。
check_finite - 检查输入数组是否只包含有限数。
import matplotlib.pyplot as pltimport numpy as npfrom scipy.interpolate import UnivariateSplinex = np.linspace(-3, 3,50)y = np.exp(-x**2) + 0.1 * np.random.randn(50)plt.plot(x, y, 'ro', ms = 5)plt.show()
输出:
热门推荐