使用interp2d执行坐标映射/插值的麻烦

时间:2013-04-01 00:30:55

标签: python scipy

我有一个基本上是4列的查找表:cols 1,2是相应的xi,yj坐标,它们映射到相应的第3和第4列中的x'i,y'j坐标。

我的目标是提供一种方法,在第一列和第二列(xi,yj)中的查找值范围内输入一些(xnew,ynew)位置,然后将该位置映射到插值(x'i) ,y'j)来自lut第3和第4列的位置范围。

我尝试过使用interp2d,但还是无法弄清楚如何将数组输入正确的格式。例如:我不明白为什么scipy.interpolate.interp2d(x'i, y'j, [xi,yj] kind='linear')会给我以下错误:

ValueError: Invalid length for input z for non rectangular grid'.

这看起来很简单,但我无法弄清楚。如果需要,我很乐意提供更多信息。

1 个答案:

答案 0 :(得分:0)

interp2d要求插值函数为1D,请参阅the docs

  

z :1-D ndarray要在数据中插值的函数的值   点。如果z是一个多维数组,它在使用前会变平。

因此,当您输入[xi,yj]时,它会从(2, n)形状转换为(2*n,),因此会出错。

你可以绕过这个设置两个不同的插值函数,每个坐标一个。如果你的lut是一个形状(n, 4)的单个数组,你会做类似的事情:

x_interp = scipy.interpolate.interp2d(lut[0], lut[1], lut[2], kind = 'linear')
y_interp = scipy.interpolate.interp2d(lut[0], lut[1], lut[3], kind = 'linear')

你现在可以做以下事情:

new_x, new_y = x_interp(x, y), y_interp(x, y)