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

3

Scipy函数griddataRbf都可以用于插值随机散布的n维数据。 它们之间有什么区别?在精度或性能方面,哪一个更优秀?

在我看来,这不是这个问题的重复,因为我不是在问如何执行插值,而是在问两种特定方法之间的技术差异。


1
可能是如何使用scipy进行二维插值?的重复问题。 - Mr. T
@Mr.T 我不这么认为,请看我上面的编辑。 - Ethunxxx
标准答案广泛讨论了性能差异。如果其中某个方面没有涉及(内存或CPU使用),请具体说明您想要了解的内容。 - Mr. T
1个回答

8

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

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

example rbf gauss

该图是一个基于高斯插值的示例,在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();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接