Python中的N维线性插值(使用有理指数评估数组)

3
假设我有一个N维数组arar.shape=(n1,...,nN)。是否有一个Python模块可以在合理的索引处评估ar
例如,假设:ar.shape=(3,4,5)。那么我正在寻找一个函数f,它可以执行以下操作:result=f(ar,[2.3,1.5,3.4])

1
要么你没有清楚地解释你想做什么,要么你的问题根本就没有意义。数组具有整数索引。说 A[1.3] 没有意义。你能提供一个输入和期望输出的例子吗? - Bakuriu
我想要的是在中间点评估数组。因此,我正在寻找的函数需要进行某种插值。对于给定的示例[2.3,1.5,3.4],它将查找最近的2^3个邻居并执行线性插值。较低的位置将是[2,1,3],而较高的位置将是[3,2,4]。这对你有意义吗? - Andre
2个回答

3

从scipy文档中得知:scipy.interpolate.griddata函数:对非结构化的N维数据进行插值。 详情请见


我找到了这个,但我猜可能速度太慢了。 我已经按结构化形式保存了我的数据,查找最近的邻居很容易,而且几乎是微不足道的。 - Andre
@Andre 你有对它进行性能分析吗?如果没有,我建议你这样做。通常使用numpy/scipy本地函数比你可以用纯Python编写的任何东西都要快(即使从理论上讲,它应该具有更低的渐近复杂度)。 - Bakuriu
@ev-br - 我有一个非结构化的3D数组,需要插值到具有特定网格间距的笛卡尔3D网格中。这样可以吗? - gansub

2

scipy.ndimage.map_coordinates 很快很容易使用;在multivariate-spline-interpolation-in-python-scipy下可以看到清晰的二维示例。

(map_coordinates( ... order=1 ) 是您所要求的——二维双线性插值,三维情况下是三线性插值...
order=0 是最近的网格点,order=2 或 3 则会查看 (order+1)^d 个点 —— 慢而平滑。)

补充说明:正如您可能知道的一样,numpy 会将浮点索引四舍五入为整数:

A = np.eye( 3 )
print A[ 0.1, 0.9 ], A[ 1.1, 2.9 ]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接