@jit улучшение для цикла - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь ускорить мой код с помощью @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.

...