2014-01-21 36 views
0

我正在嘗試使用Python與matplotlib進行繪圖。我有一個函數streaks(),其中包含n布爾值的列表,其概率p獲得'True',並返回連續條形列表。例如,[True, False, True, True, False]產生[1, 1, 2, 1]使用嵌套循環在Python中繪製陰謀

我需要爲n的每個值(從0到400以10爲增量)使用此函數500次。對於每個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

請張貼[最小,完整,測試和可讀示例](http://stackoverflow.com/help/mcve)。用更少的話來說,我們可以運行後綴代碼(添加'條紋(...)'定義),所以我們更容易幫助你。 – Christian

+0

@Christian對不起,我編輯了這個問題。希望現在已經很清楚了。 – user2901181

+1

@Christian我再次編輯它。我忘記了最後兩行。我沒有收到任何錯誤。只是一個錯誤的情節。 – user2901181

回答

0

您還沒有保存該用於創建的每個值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() 
+0

謝謝你的幫助。您的代碼修復似乎不能解決問題,但現在我發現問題並嘗試找到解決方案。 – user2901181