我有一个基本上是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'.
这看起来很简单,但我无法弄清楚。如果需要,我很乐意提供更多信息。
答案 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)