如何使用内部while循环和一系列其他计算加速Python嵌套for循环

2024-04-28 21:08:11 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有办法加速这个代码?你知道吗

  1. 在下面的代码中L\U mo,U\U star,rah,H,etc。所有阵列的大小都相同,即4000 x 5000。你知道吗
  2. 对于当前循环,循环中的所有其他变量都是常量。你知道吗
  3. 当我运行以下嵌套for循环时,几乎需要40-50分钟
for i in range(img_width):
    for j in range(img_height):

        error=99
        L_mo_cell = L_mo[i,j]
        U_star_cell = U_star[i,j]
        rah_cell = rah[i,j]
        H_cell = H[i,j]
        Zom_cell=Zom[i,j]
        d_cell=d[i,j]
        Zoh_cell=Zoh[i,j]
        To_cell=To[i,j]


        if (L_mo_cell < 0) & (L_mo_cell  > -10):  # Unstable Conditions
            while error > 0.05:
                dumm=rah_cell  # dummy variable
                x1=(1-16*(Zm-d_cell)/L_mo_cell)**0.25
                x2=(1-16*(Zoh_cell)/L_mo_cell)**0.25
                x3=(1-16*(Zoh_cell)/L_mo_cell)**0.25

                phi_h1=2*np.log((1+x1**2)/2)
                phi_h2=2*np.log((1+x2**2)/2)
                phi_m1=2*np.log((1+x1)/2)+np.log((1+x1**2)/2)-2*np.arctan(x1)+np.pi/2
                phi_m2=2*np.log((1+x3)/2)+np.log((1+x3**2)/2)-2*np.arctan(x3)+np.pi/2

                #Calculate Parameters (U*,rah,H,L_mo)
                U_star_cell=(u*const_k)/(np.log((Zm-d_cell)/Zom_cell)-phi_m1+phi_m2)
                rah_cell=(np.log((Zm-d_cell)/Zoh_cell)-phi_h1+phi_h2)/(U_star_cell*const_k)
                H_cell=(rho_a*const_Cpa)*(To_cell-Ta)/rah_cell
                L_mo_cell=(U_star_cell**3*(Ta+273.15)*rho_a*const_Cpa)/(const_g*const_k*H_cell)
                error = abs((rah_cell-dumm)/rah_cell)


        elif (L_mo_cell > 0) & (L_mo_cell < 10): #Stable Conditions

            while error > 0.05:
                dumm=rah_cell #dummy variable
                phi_h1=6*((Zm-d_cell)/L_mo_cell)*np.log((1-Zm/L_mo_cell))
                phi_h2=6*(Zom_cell/L_mo_cell)*np.log((1-Zm/L_mo_cell))
                phi_m1=phi_h1
                phi_m2=phi_h2


                # Calculate Parameters (U*,rah,H,L_mo)
                U_star_cell=(u*const_k)/(np.log((Zm-d_cell)/Zom_cell)-phi_m1+phi_m2)
                rah_cell=(np.log((Zm-d_cell)/Zoh_cell)-phi_h1+phi_h2)/(U_star_cell*const_k)
                H_cell=(rho_a*const_Cpa)*(To_cell-Ta)/rah_cell
                L_mo_cell=-(U_star_cell**3*(Ta+273.15)*rho_a*const_Cpa)/(const_g*const_k*H_cell)
                error = abs((rah_cell-dumm)/rah_cell)
                # print (error)


        else: #Neutral Conditions
            state=0
            U_star_cell=(u*const_k)/(np.log((Zm-d_cell)/Zom_cell))
            rah_cell=np.log((Zm-d_cell)/Zom_cell)*np.log((Zm-d_cell)/Zoh_cell)/(u*const_k**2)
            H_cell=(rho_a*const_Cpa)*(To_cell-Ta)/rah_cell
            L_mo_cell=-(U_star_cell**3*Ta*rho_a*const_Cpa)/(const_g*const_k*H_cell)

        U_star[i,j]=U_star_cell
        rah[i,j]=rah_cell
        H[i,j]=H_cell
        L_mo[i,j]=L_mo_cell

Tags: lognpcellerrorstarmophita