首页 > 解决方案 > 将数组传递给被间接调用的 scipy interp2d 函数的问题

问题描述

当传入范围数组进行插值时,我有一个关于尝试间接使用 interp2d 函数的问题。

背景

我有一个由 interp2d 生成的 2D 插值函数,它以 2d 极坐标(半径,phi)作为输入。

我想将此插值应用于图像,因此想使用笛卡尔坐标而不是极坐标来调用它。

极坐标的初始插值

当我传入半径和 phi 的数组时,使用极坐标中的数据构建的插值函数可以正常工作:

# generate interpolator function based on a set of radii, angles and profiles:
interpolator = interpolate.interp2d(radii, angles, profiles)

# generate interpolated values:
rad = np.arange(0, 5, 1)
phi = np.arange(-np.pi, np.pi, np.pi/2)
values = interpolator(rad, phi)

# check things worked...
assert values[0,0] == interpolator(rad[0], phi[0])

问题

我需要在图像上使用插值,因此使用笛卡尔坐标而不是极坐标(如上)。

所以我写了一个这样的笛卡尔形式:

def interpolator_cart(x, y):
    angle = np.arctan2(y, x)
    radius = np.sqrt(x*x + y*y)
    value = interpolator(radius, angle)
    return value

但是,当我构造一组 x/y 坐标数组并将它们传入时,输出 2d 值数组虽然形状正确,但没有正确的值:

xx = np.arange(-10, 10, 5)
yy = np.arange(-10, 10, 5)
values_cart = interpolator_cart(xx, yy)
assert values_cart[0,0] == interpolator_cart(xx[0], yy[0])
# throws exception as the values aren't the same

那么,有人可以阐明我哪里出错了吗?

谢谢!

标签: pythonnumpyscipyinterpolation

解决方案


推荐阅读