2011-10-14 58 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

啊。这很有道理。因为之前我是在每一步打印击球平均线的。不,不是功课。我只是一个业余爱好者。 –