从具有嵌套for循环的Python函数打印变量

2024-04-20 08:09:52 发布

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

如何在下面的代码中打印Stot?这才是我真正想要的

import numpy as np
from scipy.integrate import odeint

A = np.logspace(-2, 2, 5, 10)
lenA = len(A)
B = 2*np.logspace(-4, 1, 6, 10)
lenB = len(B)

S0plot = np.zeros((lenA,lenB))
S1plot = np.zeros((lenA,lenB))
KS0plot = np.zeros((lenA,lenB))
PS1plot = np.zeros((lenA,lenB))
Kplot = np.zeros((lenA,lenB))
Pplot = np.zeros((lenA,lenB))
y0 = [0] * 6
ydot = np.zeros((6,1))

def f(y):
    for Bloop in range(lenB):
        for Aloop in range(lenA):
            A0 = A[Aloop]
            Q = B[Bloop]
            r1 = 2e-5
            r2 = 2e-4
            a = 0.001
            d = 0.001
            k = 0.999
            P0 = 1
            tf = 1e10
            time = np.linspace(0, tf, 1001)
            S00 = Q/r1

            S0 = y[0]
            S1 = y[1]
            KS0 = y[2]
            PS1 = y[3]
            K = y[4]
            P = y[5]

            ydot[0] = Q-r1*S0+d*KS0-a*K*S0+k*PS1
            ydot[1] = k*KS0+d*PS1-S1*(r1+a*K+a*P)
            ydot[2] = a*K*S0-(d+k+r1)*KS0
            ydot[3] = a*P*S1-(d+k+r1)*PS1
            ydot[4] = (d+k+r1)*(KS0)-a*K*(S0+S1)
            ydot[5] = (d+k+r2)*PS1-a*P*S1       

            return ydot[:,0]

            y0[0] = S00
            y0[1] = 0
            y0[2] = 0
            y0[3] = 0
            y0[4] = A0
            y0[5] = P0

            soln = odeint(f, y0, time, mxstep = 5000)        
            S0 = soln[:,0]
            S1 = soln[:,1]
            KS0 = soln[:,2]
            PS1 = soln[:,3]
            K = soln[:,4]
            P = soln[:,5]
            S0plot[Aloop,Bloop] = soln[len(time)-1,0]
            S1plot[Aloop,Bloop] = soln[len(time)-1,1]
            KS0plot[Aloop,Bloop] = soln[len(time)-1,2]
            PS1plot[Aloop,Bloop] = soln[len(time)-1,3]
            Kplot[Aloop,Bloop] = soln[len(time)-1,4]
            Pplot[Aloop,Bloop] = soln[len(time)-1,5]

            Stot = S0plot + S1plot + KS0plot + PS1plot  
    Stot = f(y)
    print(Stot)

我缺少一些基本的东西。代码运行不到一秒钟,但没有输出


Tags: lentimenpzerosr1s1bloops0
1条回答
网友
1楼 · 发布于 2024-04-20 08:09:52

我没有导入所需的模块,所以我无法测试代码,也不想为它们制造障碍。但是,您的缩进级别(即范围)似乎已关闭。在全局级别的顶部有def f(y)(没有缩进),但是您试图在缩进级别1调用和打印它。这意味着您试图从函数本身调用函数,然后打印结果。你的函数似乎不是递归的,所以我不认为这是你想要的

试着去掉最后两行的缩进

相关问题 更多 >