python - scipy.interpolate.griddata 和 scipy.interpolate.Rbf 之间的区别

标签 python numpy scipy interpolation

Scipy 函数 griddataRbf两者都可以用于对随机分散的 n 维数据进行插值。 它们之间有什么区别?其中之一在准确性或性能方面更胜一筹吗?

IMO,这不是 this question 的重复项,因为我不是问如何执行插值,而是问两种特定方法之间的技术差异是什么。

最佳答案

griddata 基于 Delaunay triangulation所提供的点。然后将数据插值到每个单元格(三角形)上。例如,对于 2D 函数和线性插值,三角形内的值是经过三个相邻点的平面。

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

example rbf gauss

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

这是生成图表的代码:

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();

关于python - scipy.interpolate.griddata 和 scipy.interpolate.Rbf 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51553625/

相关文章:

python - 类型错误 : expected 1D vector for x

python - 在 datetime.date 对象的 numpy 数组中搜索日期的更快方法?

python - 如何在Python中计算一组值的密度分布?

python - 无法腌制 <type 'cv2.BRISK' > : attribute lookup cv2. BRISK 失败

python - 在 numpy 数组的多个维度上应用函数

python - Numpy中的线段相交算法

python - 如何使用 fmin_ncg 计算成本和 theta

python - 在 facebook 的不同事件上调用函数

python - 在Python中调整base64图像的大小

python - 使用 scipy.optimize.curve_fit