1

从plpython文档示例griddata 示例迁移到实际工作代码时遇到问题。

让我们假设 'my_table' 具有一些简单参考网格的 x、y 和 z 值,其中 x,y 对是点坐标,z 是该点的值。输入参数是inxiny,它们定义了我们要为其插值的点坐标z

create or replace function somefunc(inx numeric, iny numeric) 
returns numeric as 
$$ 
import numpy as np
import scipy as sp

# get the lookup table
refvals = plpy.execute("SELECT x, y, z FROM my_table")

points = np.ndarray(refvals['x'], refvals['y']) #nope
points = np.ndarray(refvals["x"], refvals["y"]) #nope
# ERROR:  TypeError: list indices must be integers, not str

points = np.array(refvals[:,0], refvals[:,1]) #nope
# ERROR:  TypeError: list indices must be integers, not tuple

zvals = refvals["z"] # nope

return sp.interpolate.griddata(points, zvals, (inx, iny), method="cubic");
$$ LANGUAGE plpython2u stable;

这不起作用,因为我不了解 refvals 发生了什么以及如何将其元素转换为 griddata 的适当数据类型。我正在考虑rdata.frames (我会refvals[,c('x','y')]用来获取 x,y 坐标对)或SQL表(我会使用select x, y from refvals),但该refvals对象是 python 中称为 a 的东西list of dict,我不太了解了解如何正确访问。

我从文档中的语法中收集到可能需要foo = rv[i]["my_column"]循环(例如, )?for i = 0:len

4

0 回答 0