使用嵌套循环在Python中生成绘图
我正在尝试使用Python和matplotlib进行绘图。我有一个函数使用嵌套循环在Python中生成绘图,python,loops,python-2.7,Python,Loops,Python 2.7,我正在尝试使用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轴代表平均最大条纹 出于某种原因,我的代码没有达到我想要的
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
#制作布尔列表
def布尔(p,n):
返回值(兰特(n)
您没有保存用于创建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()
请发一封信。简而言之,发布我们可以运行的代码(添加
条纹(…)
定义),这样我们就更容易帮助您了。@Christian抱歉,我已经编辑了这个问题。希望现在已经足够清楚了。@Christian我又编辑了一遍。我忘了最后两行。我没有收到任何错误。只是一个错误的情节。谢谢你的帮助。您的代码修复似乎没有解决问题,但我现在看到了问题,并将尝试找到解决方案。