Python中的快速二维插值与SciPy常规网格进行分散/不规则评估

时间:2012-07-30 17:27:44

标签: python numpy scipy interpolation mesh

我有一个规则的训练值网格(向量x和y,各自的网格xmesh和ymesh以及zmesh的已知值)但是要插值的散乱/不规则/不规则值组(向量xI和yI,我们在哪里感兴趣的是zI [0] = f(xI [0],yI [0])... zI [N-1] = f(xI [N-1],yI [N-1])。这个插值将是作为优化问题的一部分,数百万次调用,因此性能太重要,不能简单地使用一个方法来生成网格并进行跟踪。

到目前为止,我已经能够找到一个接近我想要的scipy.interpolate函数,即Bpf函数。然而,因为它传达了一个分散的输入,我认为它没有良好的性能,我想测试它对样条线性,线性和最近邻插值方法,我理解得更好,我希望会更快。实现这些的所有方法,我可以找到将常规网格作为训练数据(如RectBivariateSpline)似乎也需要常规网格来插值的值。

这段代码有希望说清楚我在问什么。

import numpy as np
import scipy as sp
import scipy.interpolate as interp

x = np.arange(0,2*np.pi,.1)
y = x
xmesh,ymesh = np.meshgrid(x,y)
zmesh = np.sin(xmesh)+np.cos(ymesh)
rbf = interp.Rbf(xmesh, ymesh, zmesh, epsilon=2)
xI = np.arange(0,np.pi,.05)
yI = xI
XI, YI = np.meshgrid(xI,yI)
# Notice how this is happy to take a vector or grid as input   
zI = rbf(xI, yI)
ZI = rbf(XI,YI) # equiv. to zImesh
myspline = interp.RectBivariateSpline(x, y, zmesh)
# myspline takes vectors as input but makes them into meshes for evaluation 
splineoutput = myspline(xI, yI) 
# myspline returns ZI but I want zI
print(splineoutput)
print(ZI)
print(zI)

我可以做些什么来使用像RectBivariateSpline这样的函数但是得到zI(矢量)而不是ZI(网格)?或者,是否有另一类函数以我想要的方式工作在替代优化方法上,如果是这样,我应该寻找什么?

快速提醒一下,我正在寻找的是一种快速优化技术,具有相对较大的数据阵列(20,000多个条目),网格点之间距离较小,数据非常平滑。我怀疑有一种很好的,简单的方法可以用现有的库来做我需要的但是我找不到它。感谢您的帮助。

2 个答案:

答案 0 :(得分:8)

答案 1 :(得分:3)

从scipy v0.14.0开始,RectBivariateSpline.__call__()采用可选的main: CXXFLAGS = -Wall main: main.o BuisnessCard.o Tell.o main_debug: CXXFLAGS = -Wall -g main_debug: main.o BuisnessCard.o Tell.o 关键字参数,默认为grid=

  

网格 bool

     

是否在输入数组跨越的网格上或输入数组指定的点处评估结果。

所以你可以使用:

True