Python中的随机测试模型

random testing model in Python

我想使用泊松检验函数,根据给定的概率 p 判断事件是否发生。 Python的random模块好像没有这样的东西,所以我想通了

但是,我认为这不是给定任务的最有效代码段。我也怀疑它的正确性,尽管如此,我认为 random.randrange(int) 应该是根据均匀分布工作的。

def poisson_test(p):

    '''Poisson test with two possible outcomes, where p is success probability'''

    import fractions

    import random

    from decimal import Decimal

    p = Decimal('{0}'.format(p))

    p = fractions.Fraction(p)

    if random.randrange(p.denominator) <= p.numerator :

        return True

    else:

        return False

有什么建议吗???

谢谢!

您的功能显然不起作用:

>>> from collections import Counter
>>> Counter(poisson_test(0.5) for _ in range(10000))
Counter({True: 10000})

randrange, like vanilla range排除 stop 参数,例如randrange(2) 永远不会 成为 2 因此函数总是 returns True.

最小的修复是:

if (random.randrange(p.denominator) + 1) <= p.numerator :

这给出了更合理的结果:

>>> Counter(poisson_test(0.5) for _ in range(10000))
Counter({True: 5024, False: 4976})

或者,使用 randint,其中包括两个参数:

if random.randint(1, p.denominator) <= p.numerator :

但更简单的是:

import random

def poisson_test(p):
    """Poisson test with two possible outcomes, where p is success probability."""
    return random.random() <= p

注意文档字符串的双引号和程序开头的 import,根据 the style guide