快速插值这个问题类似于前问题回答Fast interpolation over 3D array,但解决不了我的问题。在三维阵列三维原点X
我有尺寸(时间,高度,纬度,经度),标记为y.shape=(nt, nalt, nlat, nlon)
一个四维阵列。 x是高度并随(时间,纬度,经度)而变化,这意味着x.shape = (nt, nalt, nlat, nlon)
。我想插入每个(nt,nlat,nlon)的高度。插值的x_new应该是1d,不会随(时间,纬度,经度)而改变。
我用numpy.interp
,一样scipy.interpolate.interp1d
,想想在原职的答案。这些答案我不能减少循环。
我只能这样做:
# y is a 4D ndarray
# x is a 4D ndarray
# new_y is a 4D array
for i in range(nlon):
for j in range(nlat):
for k in range(nt):
y_new[k,:,j,i] = np.interp(new_x, x[k,:,j,i], y[k,:,j,i])
这些循环使这个插值太慢了计算。会有人有好点子吗?帮助将不胜感激。
如果一个new_x是按升序排列,我想你可以写一个用Cython功能来提高计算速度。 – HYRY
@HYRY new_x按升序排列。但是原来的x可能不是从小到大的顺序。这是否可用?我不熟悉Cython,也许需要一些时间来学习它,或者可以在前一篇文章中学习tiago的代码。 – Hao
但是,'numpy.interp'需要'x'按升序排列,所以需要先将x和y按x排序。 – HYRY