Я пытаюсь ускорить мой код с помощью @jit
Вот часть моего кода, которая замедляет весь код, который я отредактировал, чтобы его можно было воспроизвести для всех с поддельными значениями:
import numpy as np
import scipy
import scipy.special
from scipy import interpolate
from numba import jit
@jit
def Henkel(q,epsilon,test,H,V2,J0):
for k in range(len(q)):
H[k] = 2*np.pi*np.trapz(test*J0[k]*epsilon,x=epsilon) #Jy
V2[k] = (H[k]/H[0])**2
return H,V2
wavel = np.linspace(1,10,19)
theta1_as = 10
b_r1 = np.linspace(4E-5,1E2,99999)
epsilon = b_r1*theta1_as/2
x_intensity = np.linspace(min(epsilon),max(epsilon),71)
q = np.linspace(0,5E7,200)
H_int = np.zeros(len(q))
V2_int = np.zeros(len(q))
J0 = np.zeros((len(q),len(epsilon)))
H = np.zeros((len(wavel),len(q)))
V2 = np.zeros((len(wavel),len(q)))
for k in range(len(q)):
J0[k] = scipy.special.j0(np.pi*q[k]*epsilon*np.pi/180/3600)
for w in range(len(wavel)):
y_intensity = np.linspace(0,1.8E5,71)
f = interpolate.interp1d(x_intensity,y_intensity)
test = f(epsilon)
H[w],V2[w] = Henkel(q,epsilon,test,H_int,V2_int,J0)
Замедление кода обнаруживается в первом for
l oop путем вычисления J0
, но я не знаю, является ли @jit
полезным в этом случае, так как J0 строится с использованием scipy
функция.
И второе замедление замечено во втором l oop (over wavel), и здесь я уже пытался с помощью @jit
ускорить l oop как можно лучше, но все же потребуется некоторое время для достижения целого за l oop.
Мой вопрос заключается в том, как я могу улучшить мой код, чтобы уменьшить затраты времени в k
l oop и в w
l oop с использованием @jit
.