在我的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()
对我所需的变化太大了。
答案 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 = 500
,p = 0.05
):
http://mathurl.com/pswbndd.png
http://mathurl.com/ovqsgmu.png
有了这个,您可以再次使用random
模块:
random.normalvariate(25, 4.87340)
我会推荐使用numpy
的解决方案。它应该是确切且最快的解决方案。