Chcę interpolować jedną oś danych wewnątrz trójwymiarowej tablicy. Podane wartości x dla różnych wartości różnią się nieznacznie, ale wszystkie powinny być odwzorowane na te same wartości x.Szybka interpolacja jednej osi tablicy
Od podanych wartości x nie są identyczne, obecnie I wykonaj następujące czynności:
import numpy as np
from scipy import interpolate
axes_have = np.ones((2, 72, 2001))
axes_have *= np.linspace(0, 100, 2001)[None,None,:]
axes_have += np.linspace(-0.3, 0.3, 144).reshape((2, 72))[:,:,None]
arr = np.sin(axes_have)
arr *= np.random.random((2, 72))[:,:,None]
axis_want = np.linspace(0, 100, 201)
arr_ip = np.zeros((2, 72, 201))
for i in range(arr.shape[0]):
for j in range(arr.shape[1]):
ip_func = interpolate.PchipInterpolator(axes_have[i,j,:], arr[i,j,:], extrapolate=True)
arr_ip[i,j,:] = ip_func(axis_want)
Używanie dwóch zagnieżdżonych for
-loops zaskoczeniem jest bardzo powolny.
Czy istnieje sposób na zwiększenie prędkości? Może robiąc magię lub paralelę NumPy.
czy możesz dodać próbkę 'arr'? – DJK
Wystąpił błąd w moim przykładzie, który został już naprawiony. 'arr' powinien teraz zostać podany. – leviathan