Python scipy.interpolate.griddata和scipy.interpolate.Rbf之间的差异

Python scipy.interpolate.griddata和scipy.interpolate.Rbf之间的差异,python,numpy,scipy,interpolation,Python,Numpy,Scipy,Interpolation,Scipy函数和可用于插值随机分散的n维数据。 他们之间有什么区别?其中有一个在准确性或性能方面更优越吗 依我看,这不是重复的,因为我不是问如何执行插值,而是问两种特定方法之间的技术区别。griddata基于提供的点的数量。然后在每个单元(三角形)上插值数据。例如,对于二维函数和线性插值,三角形内的值是通过三个相邻点的平面 rbf通过为每个提供的点分配一个径向函数来工作“径向”表示函数仅取决于到点的距离。任何点的值由所有提供点的加权贡献之和获得。只要可以定义距离函数,无论变量空间的维数如何,该方

Scipy函数和可用于插值随机分散的n维数据。 他们之间有什么区别?其中有一个在准确性或性能方面更优越吗


依我看,这不是重复的,因为我不是问如何执行插值,而是问两种特定方法之间的技术区别。

griddata
基于提供的点的数量。然后在每个单元(三角形)上插值数据。例如,对于二维函数和线性插值,三角形内的值是通过三个相邻点的平面

rbf
通过为每个提供的点分配一个径向函数来工作“径向”表示函数仅取决于到点的距离。任何点的值由所有提供点的加权贡献之和获得。只要可以定义距离函数,无论变量空间的维数如何,该方法都适用

该图是基于高斯插值的示例,1D中只有两个数据点(黑点)。两个高斯(虚线)是使用的基函数。插值函数(实心红色)是这两条曲线的总和。每个点的权重由一个线性方程组内部确定,高斯函数的宽度作为点之间的平均距离

以下是生成图形的代码:

import numpy as np
from matplotlib import pyplot as plt
%matplotlib inline

from scipy.interpolate import Rbf

x, y = [0, 1], [1, 2]

x_fine = np.linspace(-1, 2, 71)

interp_fun = Rbf(x, y, function='gaussian')

y_fine = interp_fun(x_fine)

for x0, weight in zip( x, interp_fun.nodes ):
    plt.plot(x_fine, weight*interp_fun._function(x_fine-x0), '--k', alpha=.7)

plt.plot(x_fine, y_fine, 'r', label='RFB Gaussian')
plt.plot(x, y, 'ok');
plt.xlabel('x'); plt.ylabel('y'); plt.legend();

@Mr.T的可能副本我不这么认为,请参阅我上面的编辑。规范答案广泛讨论了性能差异。如果某个方面不在其范围内(内存或CPU使用),请准确地指定您还想知道的内容。