1つの軸(最後の次元)で補間する必要がある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で手動で変更したくないので、3次補間に柔軟に変更できるようにしたいので、それを避けようとしました。