n次运行中的Python平均最大Y.

时间:2016-05-01 18:07:36

标签: python matplotlib scripting

我开始学习python,我对这段代码有一个问题,我的朋友和我随机编造。在5000次运行中记录最高Y点并对其进行平均的正确方法是什么。

#!/usr/local/bin/python

import random
import matplotlib.pyplot as plt

n = 5000
p_win = 0.50
stakecounter = 0
wealth = 3.3
lwealth = [3.3]
bet = .1


while wealth  > 0 :
    flip = random.random() <= p_win
    win = 3 if flip else -3
    wealth = wealth + win * bet
    lwealth.append(wealth)
    stakecounter += 1

print(len(lwealth))
plt.plot(lwealth)
plt.show()

2 个答案:

答案 0 :(得分:1)

有两种简单的方法可以在运行中获得最大值:

  • 让变量保持最大值。例如,从maxwealth=0开始,然后在您的while循环中,每当财富增加时,让if wealth > maxwealth: maxwealth = wealth更新maxwealth。如果您不存储值列表,这是一个有用的方法,但在您的情况下,您是。
  • 最后只需使用列表中的内置max功能:max(lwealth)将为您提供列表中的最大值。

现在,关于如何获得超过5000次运行的平均最大值?最简单的方法是循环遍历代码5000次,存储最大值列表,然后执行sum(maxes)/len(maxes)。或者,使用Mark Colan的答案,用maxtotal += maxwealth之类的值累加值,然后除以n。

例如:

import itertools
import random
n = 5000
maxtotal = 0
for _ in itertools.repeat(None, n):
    p_win = 0.50
    stakecounter = 0
    wealth = 3.3
    lwealth = [3.3]
    bet = .1

    while wealth  > 0 :
        flip = random.random() <= p_win
        win = 3 if flip else -3
        wealth = wealth + win * bet
        lwealth.append(wealth)
        stakecounter += 1

    maxtotal += max(lwealth)

print maxtotal/n

请注意,使用numpy可能是您的代码的一个好主意。你的代码循环5000次需要很长时间。

答案 1 :(得分:0)

如前所述,一行代码跟踪maxwealth

if wealth > maxwealth: maxwealth = wealth

更简单,更快捷的方法是在while循环中添加这一行:

totalwealth += wealth

...然后就在while循环之后:

avgwealth /= n

也就是说,不是将财富点列表保持平均值,而是计算财富点的总数,然后除以财富点数来得到平均值。