2011-10-14 166 views
0

使用Python 2.7。使用Pylab繪製直方圖

我試圖爲隨機遊走的50次跑步產生的數字繪製直方圖。但是當我使用pylab.hist(batting_average,bins = 10)時,我得到一個奇怪的多彩色直方圖,它接近500,但只有50次運行,最大值應該能夠運行y軸將是50

這裏是我的代碼:

a = ['Hit', 'Out'] 
b = [.3, .7] 


def battingAverage(atBats, some_list=a, probabilities=b): 
    num_hits = 0 
    num_outs = 0 
    current_BA = [] 
    for i in range(1,atBats): 
     if random_pick(a, b) == 'Hit': 
      num_hits += 1 
     else: 
      num_outs +=1 
     BA = float(num_hits)/(float(num_hits)+float(num_outs)) 
     current_BA.append(BA) 
    return current_BA 

def printBAs(): 
    for i in range(50): 
     batting_average = battingAverage(501) 
     pylab.hist(batting_average, bins=10) 

這有什麼錯我的直方圖!?

讓我知道是否有需要澄清,我會盡我所能。

回答

1

傳遞給battingAverage的參數是501 ...並且是蝙蝠的數量。你做了50個直方圖,每個直方圖有500個蝙蝠。

(哦,你需要修復你的代碼格式...縮進被搞砸了。)

您的代碼不會做你認爲它。

我想你想要battingAverage返回最終擊球平均值,但它會返回一個擊球平均值列表,每個擊球一個。 然後你正在繪製該列表。

我想你想從battingAverage中返回一個數字,並且你想在printBAs()函數中累積列表,並將pylab.hist移出for循環。

我不認爲這是作業嗎?

換句話說,我想你想是這樣的:

a = ['Hit', 'Out'] 
b = [.3, .7] 

def battingAverage(atBats, results=a, probabilities=b): 
    num_hits = 0 
    num_outs = 0 
    for i in range(atBats): 
     if random_pick(results, probabilities) == 'Hit': 
      num_hits += 1 
     else: 
      num_outs +=1 
    BA = float(num_hits)/(float(num_hits)+float(num_outs)) 
    return BA 

def printBAs(): 
    batting_averages = [battingAverage(500) for i in range(50)] 
    pylab.hist(batting_averages, bins=10) 

雖然該代碼仍然需要清理...

+0

但501指的是功能battingAverage 500出場擊球,所以我將printBAs()中的batting_average設置爲由500個at-bats組成的列表current_BA。 –

+0

啊。這很有道理。因爲之前我是在每一步打印擊球平均線的。不,不是功課。我只是一個業餘愛好者。 –