我有一个 3D 数组,我需要在一个轴(最后一个维度)上进行插值。比方说y.shape = (nx, ny, nz)
,我想nz
对每个进行插值(nx, ny)
。但是,我想在每个[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)
但是,对于这个问题,我真正想要的是new_z
为每个y[i, j]
. 所以我这样做:
# 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 中手动完成。