1.5.7 插值:scipy.interpolate

scipy.interpolate对从实验数据中拟合函数是非常有用的,因此,评估没有测量过的点。这个模块是基于netlib项目的Fortran子程序 FITPACK

假想一个接近sine函数的实验数据:

In [8]:

  1. measured_time = np.linspace(0, 1, 10)
  2. noise = (np.random.random(10)*2 - 1) * 1e-1
  3. measures = np.sin(2 * np.pi * measured_time) + noise

scipy.interpolate.interp1d类可以建立一个线性插值函数:

In [9]:

  1. from scipy.interpolate import interp1d
  2. linear_interp = interp1d(measured_time, measures)

scipy.interpolate.linear_interp实例需要评估感兴趣的时间点:

In [10]:

  1. computed_time = np.linspace(0, 1, 50)
  2. linear_results = linear_interp(computed_time)

通过提供可选的参数kind也可以选择进行立方插值:

In [11]:

  1. cubic_interp = interp1d(measured_time, measures, kind='cubic')
  2. cubic_results = cubic_interp(computed_time)

现在结果可以被整合为下面的Matplotlib图片:

1.5.7 插值:scipy.interpolate - 图1

scipy.interpolate.interp2dscipy.interpolate.interp1d类似,但是是用于2-D数组。注意对于interp家族,计算的时间点必须在测量时间段之内。看一下Sprogø气象站的最大风速预测的总结练习,了解更详细的spline插值实例。