从plpython文档示例和griddata 示例迁移到实际工作代码时遇到问题。
让我们假设 'my_table' 具有一些简单参考网格的 x、y 和 z 值,其中 x,y 对是点坐标,z 是该点的值。输入参数是inx
和iny
,它们定义了我们要为其插值的点坐标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 的适当数据类型。我正在考虑r
data.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