1.scipy.interpolate.griddata()

        假设有一个基础函数的多维数据 f(x, y),只知道不形成规则网格的点的值,假设我们要对二维函数进行插值。griddata基于三角剖分,因此适用于非结构化、分散的数据。其使用方法如下:

from scipy.interpolate import griddata
 griddata(points,values,xi,method =‘linear’,fill_value = nan,rescale = False )
  • points:该参数用于传输数据点的位置,是一个二维数组,其中第一维表示数据点即向量的个数,第二维表示向量的维数。
  • values:与散点数据对应的值,可以是任意维度的数组,与points的第一维度相等;
  • xi:该参数用于传输要插值的网格点的位置,也是一个二维数组,其大小为类似于网格的形状,即要插值的一个网格中每个网格点的位置。传递给xi的位置必须在数据points中;
  • method:插值方法,支持linear、nearest、cubic三种,默认为linear;
  • fill_value:在网格点外进行插值的填充值,默认为np.nan;
  • rescale:是否对输入数据进行缩放,以使得三维立体网格得到的立方体边长相等,默认为False。

2.scipy.interpolate.RBFInterpolator()

        假设函数可以由RBF(Radial basis functions)径向基函数近似表示,把它代入微分方程并且在某个数据点集上在某种度量下迫使微分方程的误差取最小值,这个方法在一些实际应用领域也获得了非常满意的结果,可视化曲线更具光滑。。其使用方法如下:

from scipy.interpolate import RBFInterpolator
 RBFInterpolator(y, d, neighbors=None, smoothing=0.0, kernel='thin_plate_spline', epsilon=None, degree=None)
  • y:(npoints, ndims) 类似数组。
  • d:N-D y 处的数据值数组。 d 沿第一轴的长度必须等于 y 的长度。与某些插补器不同,插补轴无法更改;
  • neighbors:整数,可选,如果指定,将仅使用这么多最近的数据点计算每个评估点的插值值。默认使用所有数据点;
  • smoothing:float 或 (npoints, ) 数组,可选,平滑参数。将其设置为 0 时,插值与数据完美拟合。对于较大的值,插值接近具有指定次数的多项式的最小二乘拟合。默认值为 0。;
  • kernel:str,可选,RBF 类型。这应该是其中之一,‘linear’,‘thin_plate_spline’ ,‘cubic’,‘quintic’ ,‘multiquadric’ ,‘inverse_multiquadric’ ,‘inverse_quadratic’,‘gaussian’;
  • epsilon:浮点数,可选,缩放 RBF 输入的形状参数。如果内核是‘linear’, ‘thin_plate_spline’、‘cubic’或‘quintic’,则默认为1并且可以忽略,因为它与缩放平滑参数具有相同的效果。否则,必须指定这一点;
  • degree:整数,可选,添加多项式的次数。对于某些 RBF,如果多项式次数太小,则插值可能不是well-posed。这些 RBF 及其相应的最小度数是‘multiquadric’ : 0,‘linear’ : 0,‘thin_plate_spline’ : 1,‘cubic’ : 1,‘quintic’ : 2。

3.二者的区别

scipy.interpolate.griddata

  • 即使对于疯狂的输入数据也能产生良好的输出
  • 支持更高维度的插值
  • 不执行外推,可以为输入点的凸包外的输出设置单个值(参见fill_value
  • 在一次调用中计算内插值,因此从头开始探测多组输出点
  • 可以有任意形状的输出点
  • 支持任意维度的最近邻和线性插值,1d 和 2d 的立方。最近邻和线性插值分别使用NearestNDInterpolatorLinearNDInterpolator在引擎盖下。一维三次插值使用样条,二维三次插值用于CloughTocher2DInterpolator构建连续可微的分段三次插值器。
  • 可能违反输入数据的对称性

scipy.interpolate.RBFInterpolator

  • 即使对于疯狂的输入数据也能产生良好的输出
  • 支持更高维度的插值
  • 在输入点的凸包外进行外推(当然,外推永远是一场赌博,你通常根本不应该依赖它)
  • 第一步创建一个插值器,因此在不同的输出点对其进行评估会减少额外的工作量
  • 可以有任意形状的输出点阵列(而不是被限制为矩形网格,见后面)
  • 更有可能保持输入数据的对称性
  • 关键字支持多种径向函数kernelmultiquadricinverse_multiquadricinverse_quadraticgaussianlinearcubicquintic, (默认)。从 SciPy 1.7.0 开始,由于技术原因,该类不允许传递自定义可调用对象,但这可能会在未来的版本中添加。thin_plate_spline
  • smoothing可以通过增加参数给出不精确的插值