Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 1, 2011 08:30:06

plustilino
Зарегистрирован: 2011-08-01
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Генератор псевдослучайных чисел, но неравновероятный

random.random() генерирует случайные числа, но вероятность каждого равновероятна. Т.е. если создать список 1000 случайных чисел от 1 до 100, то диапазоны, скажем, от 1 до 50 и от 51 до 100 будут содержать примерно равное количество чисел (где-то по 500).

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

Может быть в стандартной библиотеке Python уже есть какие-нибудь фукнции, генерирующие случайные числа, но неравновероятные?



Офлайн

#2 Ноя. 1, 2011 09:18:51

agalen
От:
Зарегистрирован: 2011-03-23
Сообщения: 185
Репутация: +  17  -
Профиль   Отправить e-mail  

Генератор псевдослучайных чисел, но неравновероятный

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

Например:

def my_random():
return math.sin( random.random() * math.pi / 2 )



Офлайн

#3 Ноя. 1, 2011 11:28:12

plustilino
Зарегистрирован: 2011-08-01
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Генератор псевдослучайных чисел, но неравновероятный

А что в этой формуле определяет “распределение случайной величины”? math.pi / 2?
Вот так не получается:

def my_random():
m = random.random() * 3.14
n = math.sin(random.random() * math.pi/m)
return round(n,3)
Все равно всегда самый многочисленный диапазон последний и появились отрицательные числа.



Офлайн

#4 Ноя. 1, 2011 12:52:44

agalen
От:
Зарегистрирован: 2011-03-23
Сообщения: 185
Репутация: +  17  -
Профиль   Отправить e-mail  

Генератор псевдослучайных чисел, но неравновероятный

Формула просто приведена для примера как получить неравномерное распределение.
Если заранее известно, какое требуется распределение - просто составь формулу.
Если же функция распределения определяется случайным образом, то надо делать в 2 этапа:
1. Сформировать таблицу диапазонов.
2. Создать функцию от случайной величины, которая будет использовать эту таблицу.



Офлайн

#5 Ноя. 1, 2011 13:59:17

cutwater
От:
Зарегистрирован: 2009-01-08
Сообщения: 444
Репутация: +  19  -
Профиль   Отправить e-mail  

Генератор псевдослучайных чисел, но неравновероятный

Попробуйте использовать криптографически стойкие генераторы псевдослучайных чисел.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version