scipy.interpolate.griddata 和 scipy.interpolate.Rbf 之间的区别
Difference between scipy.interpolate.griddata and scipy.interpolate.Rbf
Scipy 函数 griddata and Rbf 都可以用来插值随机分散的 n 维数据。
它们之间有什么区别?其中之一在准确性或性能方面是否更胜一筹?
IMO,这不是 的副本,因为我不是在问如何执行插值,而是问两种特定方法之间的技术差异是什么。
griddata
是根据提供的点数Delaunay triangulation。然后在每个单元格(三角形)上插入数据。例如,对于二维函数和线性插值,三角形内的值是通过三个相邻点的平面。
rbf
通过为每个提供的点分配径向函数来工作。 'Radial' 表示该函数仅取决于到该点的距离。任何一点的值都是由所有提供的点的加权贡献之和获得的。无论变量的维度如何space,只要可以定义距离函数,该方法都适用
该图是基于高斯插值的示例,在一维空间中只有两个数据点(黑点)。两个高斯(虚线)是使用的基函数。插值函数(红色实线)是这两条曲线的总和。每个点的权重由线性方程组在内部确定,高斯函数的宽度取为点之间的平均距离。
下面是生成图表的代码:
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();
Scipy 函数 griddata and Rbf 都可以用来插值随机分散的 n 维数据。 它们之间有什么区别?其中之一在准确性或性能方面是否更胜一筹?
IMO,这不是
griddata
是根据提供的点数Delaunay triangulation。然后在每个单元格(三角形)上插入数据。例如,对于二维函数和线性插值,三角形内的值是通过三个相邻点的平面。
rbf
通过为每个提供的点分配径向函数来工作。 'Radial' 表示该函数仅取决于到该点的距离。任何一点的值都是由所有提供的点的加权贡献之和获得的。无论变量的维度如何space,只要可以定义距离函数,该方法都适用
该图是基于高斯插值的示例,在一维空间中只有两个数据点(黑点)。两个高斯(虚线)是使用的基函数。插值函数(红色实线)是这两条曲线的总和。每个点的权重由线性方程组在内部确定,高斯函数的宽度取为点之间的平均距离。
下面是生成图表的代码:
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();