SciPy依赖于Numpy,SciPy包含的功能:最优化、线性代数、积分、插值、拟合、特殊函数、快速傅里叶变换、信号处理、图像处理、常微分方程求解器等,SciPy是高端科学计算工具包,用于数学、科学、工程学等领域。本文主要介绍Python SciPy 插值(Interpolation)。

1、什么是插值(Interpolation)?

插值是一种在给定点之间生成点的方法。

例如:对于点1和2,我们可以进行插值并找到点1.33和1.66。

插值有许多用途,在机器学习中,我们经常处理数据集中的缺失数据,插值通常用于替换那些值。

这种填充值的方法称为插补。

除了插补外,还经常在需要平滑数据集中离散点的地方使用插值法。

2、如何在SciPy中实现插值(Interpolation)?

SciPy为我们提供了一个名为scipy.interpolate的模块,该模块具有许多处理插值的功能:

3、1D Interpolation

函数interp1d()用于对具有1个变量的分布进行插值。

它需要xy点并返回可以用新的x调用的可调用函数,并返回相应的y

例如: 

对于给定的xs和ys,从2.1、2.2 ...到2.9插值:

from scipy.interpolate import interp1d
import numpy as np

xs = np.arange(10)
ys = 2*xs + 1

interp_func = interp1d(xs, ys)

newarr = interp_func(np.arange(2.1, 3, 0.1))

print(newarr)

Result:

[5.2  5.4  5.6  5.8  6.   6.2  6.4  6.6  6.8]

注意:新xs的范围应与旧xs的范围相同,这意味着我们不能调用值大于10或小于0的interp_func()

4、样条插值 (Spline Interpolation)

在1D插值中,将点拟合为一条曲线,而在样条插值中,将点与由多项式定义的分段函数(称为样条)拟合。

UnivariateSpline()函数采用xsys并生成可调用的函数,该函数可通过新的xs进行调用。

分段函数:针对不同范围具有不同定义的函数。

例如: 

查找以下非线性点的2.1、2.2 ... 2.9的单变量样条插值:

from scipy.interpolate import UnivariateSpline
import numpy as np

xs = np.arange(10)
ys = xs**2 + np.sin(xs) + 1

interp_func = UnivariateSpline(xs, ys)

newarr = interp_func(np.arange(2.1, 3, 0.1))

print(newarr)

Result:

  [5.62826474 6.03987348 6.47131994 6.92265019 7.3939103  7.88514634
   8.39640439 8.92773053 9.47917082]

5、径向基函数插值

径向基函数是对应于固定参考点定义的函数。

Rbf()函数也将xsys作为参数,并生成可以用新的xs调用的可调用函数。

例如:

使用rbf插值xs和ys并找到2.1、2.2 ... 2.9的值:

from scipy.interpolate import Rbf
import numpy as np

xs = np.arange(10)
ys = xs**2 + np.sin(xs) + 1

interp_func = Rbf(xs, ys)

newarr = interp_func(np.arange(2.1, 3, 0.1))

print(newarr)

 Result:

  [6.25748981  6.62190817  7.00310702  7.40121814  7.8161443   8.24773402
   8.69590519  9.16070828  9.64233874]

推荐文档