Генерация случайных чисел Пуассона

Я писал функцию (без использования функции random.poisson), которая генерирует случайное число из распределения Пуассона с лямбда-а.

При запуске функции с разными параметрами я всегда получаю 0. Я предполагаю, что это проблема алгоритма, но не знаю, где не так.

Вот мой код.

#takes a as lambda (mean)
def random_poisson(a):
    x = 0
    p = 1
    while p >= math.exp(a):
        i = random.random()
        p = p * i
        x += 1

    return x

Пробуем разные значения лямбда:

print(random_poisson(3))
print(random_poisson(5))
print(random_poisson(math.log(5)))

Выход:

0
0
0

Большое спасибо!


person xzhang66    schedule 20.09.2017    source источник
comment
Пожалуйста, приведите пример параметров, которые вы использовали.   -  person DYZ    schedule 20.09.2017
comment
@DYZ Я добавил примеры :)   -  person xzhang66    schedule 20.09.2017
comment
Вы должны предварительно вычислить math.exp(-a) и использовать сохраненный результат в сравнении while.   -  person pjs    schedule 20.09.2017


Ответы (1)


Для любого положительного a math.exp(a) больше 1, но p равно 1. Условие цикла никогда не выполняется, цикл никогда не выполняется, и ваша функция возвращает начальное значение x.

person DYZ    schedule 20.09.2017
comment
О, я понял тебя! Должно быть -а, а не а. Большое спасибо! - person xzhang66; 20.09.2017