用Pylab绘制直方图

2024-09-27 23:19:46 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python2.7中工作。

我正试图绘制一个柱状图,显示我随机行走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)

我的直方图怎么了!?

如果有什么需要澄清的,请告诉我,我会尽力的。


Tags: defcurrent直方图floatnumhistaveragehits
1条回答
网友
1楼 · 发布于 2024-09-27 23:19:46

传递给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)

尽管代码仍然需要清理。。。

相关问题 更多 >

    热门问题