Генерация экспоненциального распределения в Python - PullRequest
0 голосов
/ 05 октября 2018

Я знаю о функции random.expovariate, но это не то, что мне нужно.Я хотел бы создать поток длиной N, в котором каждый элемент i между 1 и M выбран с вероятностью 1 / (2 ^ (i + 1)). Таким образом, элемент 0выбранный с вероятностью 1/2, элемент 1 с вероятностью 1/4, элемент 2 с вероятностью 1/8 и т. д.

Есть ли какой-нибудь простой способ сделать это в python?

1 Ответ

0 голосов
/ 05 октября 2018

простое решение состоит в том, чтобы вернуться к функции и предсказать вероятности нахождения числа:

def generate():
    proba = random.random()
    max = 0
    for i in range(1,M+1):
         max += (1/2)**i
         if(proba<= max):
              return i-1
    return generate()

если М мало, распределение не сходится и, следовательно, не все [0,1] являются повторно поддающимися повторению,так что вы просто попробуйте еще раз.

небольшой тест:

M = 10
res = [0 for i in range(M+1)]
for i in range(1000):
    res[generate()]+=1
plt.plot([r/1000 for r in res])

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...