使用Python 2.7。
我正在尝试为随机游走的50次贯穿所产生的数字绘制直方图。但是当我使用pylab.hist(batting_average,bins = 10)时,我得到一个奇怪的多色直方图,接近500,但只有50次行走,它应该可以在y上运行的最大值-axis将是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)
我的直方图出了什么问题!?
如果有任何需要澄清的话,请告诉我,我会尽力而为。
答案 0 :(得分:1)
传递给battingAverage
的参数是501 ...并且是at-bats的数量。你正在做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)
虽然该代码仍需要清理......