我有一个三维数组,需要在其中的一个轴上进行插值(最后一个维度)。假设 y.shape = (nx, ny, nz)
,我想在每个(nx, ny)
中对nz
进行插值。然而,我希望为每个[i,j]
插值到不同的值。
这是一些示例代码。如果我想要插值到单个值,比如说new_z
,我可以像下面这样使用scipy.interpolate.interp1d
# y is a 3D ndarray
# x is a 1D ndarray with the abcissa values
# new_z is a number
f = scipy.interpolate.interp1d(x, y, axis=-1, kind='linear')
result = f(new_z)
然而,对于这个问题,我实际上想要做的是针对每个y[i, j]
插值到不同的new_z
。所以我这样做:
# y is a 3D ndarray
# x is a 1D ndarray with the abcissa values
# new_z is a 2D array
result = numpy.empty(y.shape[:-1])
for i in range(nx):
for j in range(ny):
f = scipy.interpolate.interp1d(x, y[i, j], axis=-1, kind='linear')
result[i, j] = f(new_z[i, j])
很不幸,使用多个循环会变得低效和缓慢。有没有更好的方法来进行这种插值?线性插值就足够了。一种可能的方法是在Cython中实现它,但我想避免这样做,因为我想要灵活地改变到三次插值,并且不想在Cython中手动完成。