我正在尝试使用Python和matplotlib制作一个情节。我有一个函数streaks()
,它获取n
布尔值的列表,概率p
得到'真',并返回一系列连续条纹。例如,[True, False, True, True, False]
会产生[1, 1, 2, 1]
。
我需要为n的每个值使用此函数500次(从0到400,增量为10)。在每个n值的500次试验中,我需要找到最大连续条纹,然后取500次试验的平均值。
我应该拥有的最终图表的x轴代表n
,y轴代表平均最大条纹。
出于某种原因,我的代码没有做我想要的,我觉得我拥有所有的组件。任何帮助,将不胜感激。谢谢!
def averagemaximums():
maxvals = []
avgmaxvals = []
for j in range(500):
for n in range(0, 400, 10):
maxvals.append(max(streaks(0.5, n)))
a = (sum(maxvals))/(500)
avgmaxvals.append(a)
plot(avgmaxvals)
show()
编辑:根据要求提供额外信息:
#Makes list of bools
def bools(p, n):
return (rand(n) < p)
#Makes list that counts successive values
def streaks(p, n):
run = bools(p, n)
successionlist = []
counter = 1
for j in range(1, n):
if run[j] == run[j - 1]:
counter = counter + 1
else:
successionlist.append(counter)
counter = 1
successionlist.append(counter)
return successionlist
答案 0 :(得分:0)
您没有保存用于创建a的每个值的n值。因此,当您绘制argmaxvals时,您将根据列表索引而不是n来绘制它们。
尝试此修改:
for j in range(500):
for n in range(0, 400, 10):
maxvals.append(max(streaks(0.5, n)))
a = (sum(maxvals))/(500)
avgmaxvals.append((n,a))
x,y = zip(*argmaxvals)
plot(x,y)
show()