快速插值這個問題類似於前問題回答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