python - 将数组传递给被间接调用的 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
那么,有人可以阐明我哪里出错了吗?
谢谢!
解决方案
推荐阅读
- servicestack - 覆盖特定端点上的 AutoQuery MaxLimit
- javascript - 从其他组件中的服务访问数据
- c++ - 如果参数不是引用,如何防止编译传递的 lambda
- reactjs - 使用 webpack 的 React Semantic-ui 包大小太大
- bash - AWK 中的条件
- ios - 再次出现视图时不调用drawRect
- django - 如何将对象存储在 django 模型中?
- javascript - 如何使用 ES6 导入重新导入模块
- python - Bokeh:是否可以从 bokeh.tile_providers 更改坐标参考系统?
- c#-to-vb.net - 避免跨列重复记录