1

我有一个本质上是 4 列的查找表:列 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'.

这似乎很简单,但我一直无法弄清楚。如果需要,我很乐意提供更多信息。

4

1 回答 1

0

interp2d要求插值函数为 1D,请参阅文档

z : 1-D ndarray 要在数据点处插值的函数的值。如果 z 是多维数组,则在使用前将其展平。

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

您可以设置两个不同的插值函数,每个坐标一个。如果您的 lut 是一个 shape 数组(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)
于 2013-04-01T06:47:30.177 回答