Python - 如何以按位概率生成随机数?

时间:2016-02-06 16:47:33

标签: python random probability

我需要算出在指定时间内衰变的原子数。我获得了Radon-222的半衰期,并由此计算出任何一个原子在1分钟内衰变的概率。

如果我有x个原子且概率为y,我如何计算在1分钟内衰减的数字?

目前我的功能非常低效(见下文),但这可能更容易实现。

def Decay(atomno, decayrate):
    out = 0
    for atom in range(atomno):
        if random.uniform(0,1)<decayrate:
            out += 1
    return out

1 个答案:

答案 0 :(得分:1)

听起来你想要一个二项分布的随机数,由numpy.random.binomial产生。

对于相当多的原子,这可以通过正态分布来近似:

from random import normalvariate

def binomialvariate(n, p):
    """
    Generate random number from a binomial distribution
      using a normal-distribution approximation
    """
    return normalvariate(n * p, (n * p * (1 - p)) ** 0.5)

,像

一样使用
ATOMS = 1000000
DECAY_PROB = 0.1

for i in range(10):
    print(binomialvariate(ATOMS, DECAY_PROB))

给出

100307.20222237767
99709.2126851899
99834.51936804672
100085.99501737293
100121.93115561221
100379.9532069239
99848.39057702095
99465.46179311829
100357.77320779095
99990.74240156381