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

2024-10-02 20:30:14 发布

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

我正开始学习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()

Tags: 方法代码import记录朋友pltrandomwin
2条回答

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

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

现在,关于如何获得5000次以上的平均最大跑步次数?最简单的方法是在代码中循环5000次,存储一个最大值列表,然后执行sum(maxes)/len(maxes)。或者,使用马克·科兰的答案,用类似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次需要很长时间

正如前面的回答所建议的,一行代码跟踪maxwealth

if wealth > maxwealth: maxwealth = wealth

获取平均值的一种更简单、更快的方法是在while循环中添加以下行:

totalwealth += wealth

…然后就在while循环之后:

avgwealth /= n

也就是说,与其保留一个财富点数列表以便以后进行平均,只需计算财富点数的总和,然后除以财富点数即可得到平均值

相关问题 更多 >