1.5.7 插值:scipy.interpolate
scipy.interpolate对从实验数据中拟合函数是非常有用的,因此,评估没有测量过的点。这个模块是基于netlib项目的Fortran子程序 FITPACK
假想一个接近sine函数的实验数据:
In [8]:
measured_time = np.linspace(0, 1, 10)
noise = (np.random.random(10)*2 - 1) * 1e-1
measures = np.sin(2 * np.pi * measured_time) + noise
scipy.interpolate.interp1d类可以建立一个线性插值函数:
In [9]:
from scipy.interpolate import interp1d
linear_interp = interp1d(measured_time, measures)
scipy.interpolate.linear_interp
实例需要评估感兴趣的时间点:
In [10]:
computed_time = np.linspace(0, 1, 50)
linear_results = linear_interp(computed_time)
通过提供可选的参数kind
也可以选择进行立方插值:
In [11]:
cubic_interp = interp1d(measured_time, measures, kind='cubic')
cubic_results = cubic_interp(computed_time)
现在结果可以被整合为下面的Matplotlib图片:
scipy.interpolate.interp2d 与scipy.interpolate.interp1d类似,但是是用于2-D数组。注意对于interp
家族,计算的时间点必须在测量时间段之内。看一下Sprogø气象站的最大风速预测的总结练习,了解更详细的spline插值实例。