概率函数生成值而不是调用随机

时间:2015-08-18 06:29:09

标签: python statistics

在我的python代码中,有一些地方我的人口中每个人都有x个可能发生的事情,但我只需要受影响的人数。

amount = 0
population = 500
chance = 0.05

for p in range(population):
    if random.random() < chance:
        amount += 1

我的直觉告诉我,除了调用random.random()500次之外,必须有一种不那么强力的方法。我不知道的一些数学或统计术语或功能。

amount = population * chance * random.random()

对我所需的变化太大了。

2 个答案:

答案 0 :(得分:9)

n 0-1随机变量之和的分布,每个变量概率为 p ,称为binomial distribution,参数 n p 。我相信numpy.random.binomial会做你想做的事。

答案 1 :(得分:2)

诀窍不是执行离散循环,而是使用随机模型(二项分布)来简化它。

对于特殊值范围,您可以将分布转换为另一个。对于大量实验(在您的情况下为n=500),二项分布can be approximated to a normal distribution

如果您不想安装numpy,可以对此进行估算。

针对您的情况(n = 500p = 0.05):

http://mathurl.com/pswbndd.png

http://mathurl.com/ovqsgmu.png

有了这个,您可以再次使用random模块:

random.normalvariate(25, 4.87340)

我会推荐使用numpy的解决方案。它应该是确切且最快的解决方案。