我开始学习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()
答案 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
也就是说,不是将财富点列表保持平均值,而是计算财富点的总数,然后除以财富点数来得到平均值。