使用嵌套循环在Python中创建绘图

时间:2014-01-21 02:30:20

标签: 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轴代表平均最大条纹。

出于某种原因,我的代码没有做我想要的,我觉得我拥有所有的组件。任何帮助,将不胜感激。谢谢!

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

1 个答案:

答案 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()