Python在嵌套循环中查找平均值

时间:2014-04-27 20:39:01

标签: python python-2.7 average nested-loops

我试图使用数组来做这件事,但是我缺乏任何编程技巧使得这很困难。所以在这里尝试别的东西。

我有一个程序:

for x in range (0,N2):
    I=1 #resets the variables
    Q=0
    U=0
    for x in range (0,N):
        theta= 90+randint (-dtheta,dtheta) #random component 
        Q0=Q
        U0=U
        I0=I
        I=(I0*cosh(dTp)+S*sinh(dTp))*exp(-dT) #reuses P from previous run through
        Q=(Ip*cos(2*theta)+Q0)*exp(-dT)
        U=(Ip*sin(2*theta)+U0)*exp(-dT)
        P=100*sqrt(Q**2+U**2)/I
        print 'x=', x, 'P=', P

因此,程序通过复杂的方程式获得P值,并循环遍历这些方程N次。然后它会随机更改一些变量,并经过N2次过程。

我要做的是:每N2次点击N值,我想要这些值的平均值。

这是当前打印的程序(打印xP)。

x=0 P= 0.666656790299
x=1 P= 1.33305129414
x=2 P= 1.99135189726
x=3 P= 2.65356540458
x=4 P= 3.31718464722
x=5 P= 3.94383330744
x=6 P= 4.57470649236
x=7 P= 5.22041300059
x=8 P= 5.87783977662
x=9 P= 6.53297448834
x=0 P= 0.666656790299
x=1 P= 1.33244225853
x=2 P= 1.96631331155
x=3 P= 2.6285933052
x=4 P= 3.2901846442
x=5 P= 3.95565476517
x=6 P= 4.61500717059
x=7 P= 5.27548752021
x=8 P= 5.87881617052
x=9 P= 6.53895040683

其中N2 = 2且N = 10。你看到有两个值如.66(x=0)吗?还有两个像6.5(x=9)?我希望能够得到具有相同N值的所有数字的平均值。因此,所有x = 0值(〜.66)的平均值x = 1值(~1.33)一直到x = 9值(~6.65)。

最终目标是将所有这些平均值与N进行对比。

任何帮助都会令人惊讶,因为我对编程几乎一无所知。

1 个答案:

答案 0 :(得分:0)

我仍然不确定你在循环中请求平均值的位置。

将一个计数器变量置于其外。计算你计算P的次数。然后有一个sum_p变量来保持计算出的所有P的总值。

然后平均值只是sum_p / cnt。

如果你想开始追踪新的平均值,你可以设置cnt = 0和sum_p = 0.我们有免费的cnt与N.

for x in range (0,N2):
    I=1 #resets the variables
    Q=0
    U=0
    sum_p = 0
    for x in range (0,N):
        theta= 90+randint (-dtheta,dtheta) #random component 
        Q0=Q
        U0=U
        I0=I
        I=(I0*cosh(dTp)+S*sinh(dTp))*exp(-dT) #reuses P from previous run through
        Q=(Ip*cos(2*theta)+Q0)*exp(-dT)
        U=(Ip*sin(2*theta)+U0)*exp(-dT)
        P=100*sqrt(Q**2+U**2)/I
        sum+p += P
        print P
    print 'Avg', sum_p//N

我不确定你为什么要创建Q,U,I的副本。而不是仅仅在计算中使用前一个副本。这是完全有效的,它使用旧值并设置新值。

        I=(I*cosh(dTp)+S*sinh(dTp))*exp(-dT) #reuses P from previous run through
        Q=(Ip*cos(2*theta)+Q)*exp(-dT)
        U=(Ip*sin(2*theta)+U)*exp(-dT)