Форум сайта python.su
random.random() генерирует случайные числа, но вероятность каждого равновероятна. Т.е. если создать список 1000 случайных чисел от 1 до 100, то диапазоны, скажем, от 1 до 50 и от 51 до 100 будут содержать примерно равное количество чисел (где-то по 500).
А требуется получить список случайных чисел, но так, чтобы разные диапазоны содержали разное количество чисел.
Удалось достаточно криво и не до конца запрограммировать это. Алгоритм сводится к тому, что от, например, 1000 случайно определяется количество числел для определенного диапазона. Потом из 1000 вычитается это количество, а над остатком повторяются эти действия, но уже для другого диапазона.
Может быть в стандартной библиотеке Python уже есть какие-нибудь фукнции, генерирующие случайные числа, но неравновероятные?
Офлайн
Достаточно использовать функцию, которая будет менять распределение случайной величины на требуемое.
Например:
def my_random():
return math.sin( random.random() * math.pi / 2 )
Офлайн
А что в этой формуле определяет “распределение случайной величины”? math.pi / 2?
Вот так не получается:
def my_random():
m = random.random() * 3.14
n = math.sin(random.random() * math.pi/m)
return round(n,3)
Офлайн
Формула просто приведена для примера как получить неравномерное распределение.
Если заранее известно, какое требуется распределение - просто составь формулу.
Если же функция распределения определяется случайным образом, то надо делать в 2 этапа:
1. Сформировать таблицу диапазонов.
2. Создать функцию от случайной величины, которая будет использовать эту таблицу.
Офлайн
Попробуйте использовать криптографически стойкие генераторы псевдослучайных чисел.
Офлайн