2016-04-07 2 views
-1

Я хотел бы иметь программу, которая вызывает случайную функцию, которая дает результат 0,1,2 в виде определенного количества раз и подсчитывает результат для каждого прогона. С использованием random.randrange (0,3) я получаю равное распределение.Создать функцию распределения вероятности из заданного probalbilty

Как получить распределение со следующей вероятностью.

0: 0,4633

1: 0,3147

2: 0,2218

Эти цифры являются переменными, которые я Рассчитанные в другой функции, и они меняются после того, как я снова запустить функцию.

import random 

zeros = 0 
ones = 0 
twos = 0 

for i in range(10000): 
    a = random.randrange(0,3) 

    if a == 0: 
     zeros = zeros + 1 
    if a == 1: 
     ones = ones + 1 
    if a == 2: 
     twos = twos + 1 


print "zeros = ", zeros 
print "ones = ", ones 
print "twos = ", twos 

нули = 3345

Ones = 3326

двоек = 3329

Wanted:

нули = 4633

те = 3147

двоек = 2218

Спасибо заранее :)

+0

Soooo Вы хотите, чтобы случайное распределение не было случайным? Какой у Вас вопрос? Вы удивлены, что подсчеты меняются при каждом прогоне? – miradulo

+0

Вы понимаете, что эти «вероятности» не суммируются до 1.0? Q.E.D., они не являются вероятностями. Кроме того, вы не должны ожидать получения одинаковых результатов в каждом испытании, так же, как вы не ожидаете того же количества 6 из 100 рулонов 6-сторонней матрицы, если вы повторите эксперимент. – pjs

ответ

0
def get_my_rand() 
    r = random.randrange(1,10000) 
    if r <= 4633: 
    return 0 
    elif r <= 4633 + 3147: 
    return 1 
    else: 
    return 2 
0

Может быть, я не понимаю вопрос, но если у вас есть распределение вы хотите, то вы можете просто создайте список, соответствующий этому распределению:

N = 10 
zeros = int(N * 0.4633) 
ones = int(N * 0.3147) 
twos = N - zeros - ones 
l = [0] * zeros + [1] * ones + [2] * twos 

Если вы хотите, чтобы он выглядел более "nat урал»вы можете перетасовать список: D

random.shuffle(l) 

даст вам хороший список с распределением:

[1, 0, 0, 2, 1, 0, 1, 0, 2 , 2]

1

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

a = random.randrange(0,9998) 

if 0<=a<=4632: 
    zeros = zeros + 1 
if 4643<=a<=7790: 
    ones = ones + 1 
if 7791<=a<=9998: 
    twos = twos + 1 
Смежные вопросы