Бимодальное распределение в C или Python - PullRequest
2 голосов
/ 16 марта 2009

Какой самый простой способ генерировать случайные значения по бимодальному распределению в C или Python?

Я мог бы реализовать что-то вроде алгоритма Зиккурата или преобразования Бокса-Мюллера, но если есть готовая библиотека или более простой алгоритм, о котором я не знаю, это было бы лучше.

Ответы [ 2 ]

4 голосов
/ 16 марта 2009

Разве вы не выбираете значения одного из двух модальных распределений?

http://docs.python.org/library/random.html#random.triangular

Звучит так, будто вы просто переключаетесь между двумя наборами параметров для вызова треугольника.

def bimodal( low1, high1, mode1, low2, high2, mode2 ):
    toss = random.choice( (1, 2) )
    if toss == 1:
        return random.triangular( low1, high1, mode1 ) 
    else:
        return random.triangular( low2, high2, mode2 )

Это может сделать все, что вам нужно.

2 голосов
/ 16 марта 2009

Всегда существует старомодный прямой алгоритм принятия-отклонения . Если это было достаточно хорошо для Джонни фон Неймана, это должно быть достаточно для вас; -).

...