插值 2D 数据

计算科学 Python 插值
2021-11-27 12:43:22

linspace我在 Python 中使用 NumPy和生成了笛卡尔网格meshgrid,并且我从一个未知函数获得了这个二维网格上的一些数据。我想在网格边界内的一些点上获得函数值的近似值,这些点不属于它。我没有其他非结构化网格,我只想知道某些点的值。我假设我必须以某种方式插入数据,但我对此一无所知,阅读有关interpolateSciPy 模块和一些相关组件的文档也无济于事。我怎样才能找出这些插值数据?

注意:我知道我想要完成什么,但我以前从未做过这样的任务,而且我在用正确的概念和词汇来表达这个问题时遇到了一些问题。如果我不够清楚,请帮助我改进我的问题。

4个回答

我特别喜欢你所描述的双变量样条类。您可以使用它来创建一个函数(即它可以在任何时候调用),该函数使用样条插值数据。如果您只需要插值,则只需将kxky值设置为 1。如果您想要更平滑的函数,则增加样条的阶数(可以说 3 是一个不错的选择),您甚至可以使用我从未使用过的平滑因子。您将使用x和值是给您的值,而值将是函数值。ylinspacez

您可以在http://en.wikipedia.org/wiki/Multivariate_interpolation找到关于二维插值的方法和词汇的良好概述

Travis Oliphant 制作了一个不错的视频,他在其中讨论了使用 python 进行 2D 插值:请参阅 youtube 视频Python Interpolation 3 of 4: 2d interpolation with Rbf and interp2d

假设您有一个 X 轴从0,1,...,i,...,M和 Y 轴从0,1,...,j,...,N. 每个i,j在一个非负整数中。

您可以将网格上的数据视为网格位置的函数(i,j). 实际上,数据z=f(i,j).

假设你想要这个函数的值(i,j), 在哪里i=i+δij=j+δj, 这样δiδj是之间的小数01. 你的问题是找到z=f(i,j)=f(i+δi,j+δj).

在这样的网格上进行插值有多种选择。最简单的方法之一是最近邻插值。在这种插值中,您只需分配给(i,j),最近的网格点的值。这样做的一个天真的方法是四舍五入ij到最接近的整数。

稍微好一点的插值方案将使用位于网格上的最近邻居的加权组合。例如,对于线性插值,您将使用四个最近的网格点(i,j),(i+1,j),(i,j+1)(i+1,j+1)找到合适的插值(i,j).