Этот модуль реализует генераторы псевдослучайных чисел под различные потребности.
- Для целых чисел есть выбор одного из диапазона.
- Для последовательностей — выбор случайного элемента, функция случайной сортировки списка и функция случайного выбора нескольких элементов из последовательности.
- Есть функции для вычисления однородных, нормальных (Гауссовских), логнормальных, отрицательных экспоненциальных, гамма и бета распределений.
- Для генерации распределений углов доступно распределение фон Мизеса.
Почти все функции модуля зависят от основной функции random() , которая генерирует случайным образом чисто с плавающей точкой(далее float) равномерно в полуоткрытом диапазоне [0.0, 1.0).
Python использует Mersenne Twister в качестве основного генератора. Он производит 53-битные точные float и имеет период 2**19937-1. Основная его реализация в C быстрая и многопоточная. Mersenne Twister один из наиболее широко протестированных генераторов случайных чисел. Однако, будучи полностью детерминированным, он подходит не для любых целей, особенно для криптографических.
Как работает Random в играх
Модуль random так же предоставляет класс SystemRandom . Этот класс использует системную функцию os.urandom() для генерации случайных чисел из источников, которые предоставляет операционная система.
Псевдослучайные генераторы этого модуля не должны использоваться в целях безопасности. Для обеспечения безопасности или для криптографического использования ознакомьтесь с модулем secrets .
Функции для целых чисел
random.randrange(stop)
random.randrange(start, stop[, step])
Возвращает случайно выбранный элемент из range(start, stop, step) . Это эквивалентно choice(range(start, stop, step)) , но не создает объект диапазона.
Источник: pythonru.com
Random Python
Основы
Автор Иван Душенко На чтение 11 мин Просмотров 10.3к. Опубликовано 03.11.2021
Каждый человек ежедневно сталкивается со случайностью. Википедия нам говорит: случайность — это результат маловероятного или непредсказуемого события. Непредсказуемого. Стоит отметить, что, чем сложнее система, тем ниже возможность прогнозировать (предсказывать) её будущие состояния. Мир сложен и именно по-этому случайность встречается столь часто.
Можно сказать, что случайностью мы называем все события, которые не можем предугадать. Таким образом, разговор о случайном – это разговор о нехватке информации. Но эту нехватку человек научился использовать себе на пользу. К примеру, случайные величина широко применяются в криптографии.
В языке Python есть удобные инструменты для работы со случайными значениями. Речь о модуле стандартной библиотеки под названием random (и не только о нём). Давайте знакомиться!
random. Генерация псевдослучайных чисел на компьютере
Как использовать модуль random в Python
Для начала модуль надо импортировать.
import random
Этот модуль содержит функции для работы со случайным числом.
import random print(random.random()) # Вывод: 0.22721918183118728
Вот и наше первое случайное число.
Python функции модуля random
Случайное целое число — randint() функция random
Самое частое применение данного модуля — генерация случайных чисел. Самая популярная функция для этого — randint().
Она возвращает случайное целое число, лежащее в диапазоне, указанном в параметрах функции. Оба аргумента обязательны и должны быть целыми числами.
import random print(‘Случайное целое число:’, end=’ ‘) print(random.randint(0, 10)) # Вывод: Случайное целое число: 10
Генерация случайного целого числа — randrange()
Функция randrange() используется для генерации случайного целого числа в пределах заданного диапазона. Отличие от randint() заключается в том, что здесь есть третий параметр – шаг, по умолчанию равный единице.
import random print(‘Случайное целое число:’, end=’ ‘) print(random.randrange(0, 10, 2)) # только чётные числа # Вывод: Случайное целое число: 4
Выбор случайного элемента из списка choice()
Вы играли в детстве в «считалочки»? Эники-беники… Вот этим и занимается random.choice(): функция возвращает один случайный элемент последовательности.
import random print(list(‘abracadabra’)) print(random.choice(list(‘abracadabra’))) # Вывод: [‘a’, ‘b’, ‘r’, ‘a’, ‘c’, ‘a’, ‘d’, ‘a’, ‘b’, ‘r’, ‘a’] r
Функция sample()
random.sample() применяется, когда надо выбрать несколько элементов из заданной коллекции. Она возвращает список уникальных элементов, выбранных из исходной последовательности. Количество элементов, которое вернёт функция, задаётся аргументом k.
import random example = list(‘abracadabra’) print(example) print(random.sample(example, 5)) # Вывод: [‘a’, ‘b’, ‘r’, ‘a’, ‘c’, ‘a’, ‘d’, ‘a’, ‘b’, ‘r’, ‘a’] [‘d’, ‘r’, ‘b’, ‘a’, ‘c’]
Случайные элементы из списка — choices()
random.choices делает то же, что и random.sample(), но элементы, которые она возвращает, могут быть не уникальными.
import random example = list(‘abracadabra’) print(example) print(random.choices(example, k=15)) # Вывод: [‘a’, ‘b’, ‘r’, ‘a’, ‘c’, ‘a’, ‘d’, ‘a’, ‘b’, ‘r’, ‘a’] [‘d’, ‘a’, ‘d’, ‘a’, ‘r’, ‘b’, ‘r’, ‘a’, ‘d’, ‘b’, ‘a’, ‘r’, ‘d’, ‘a’, ‘a’]
Генератор псевдослучайных чисел — seed()
Метод seed() используется для инициализации генератора псевдослучайных чисел в Python. Вот что это означает: для генерации псевдослучайных чисел необходимо какое-то исходное число и именно это число можно установить данным методом. Если значение seed не установлено, тогда система будет отталкиваться от текущего времени.
import random random.seed(5) print(random.random()) print(random.random()) print(random.random()) random.seed(5) print(random.random()) print(random.random()) print(random.random()) # Вывод: 0.6229016948897019 0.7417869892607294 0.7951935655656966 0.6229016948897019 0.7417869892607294 0.7951935655656966
Перемешивание данных — shuffle()
Метод random.shuffle() применяется для расстановки элементов последовательности в случайном порядке. Представьте коробку в которой лежат какие-то предметы. Встряхните её
import random example = list(‘abracadabra’) print(example) random.shuffle(example) print(example) # Вывод: [‘a’, ‘b’, ‘r’, ‘a’, ‘c’, ‘a’, ‘d’, ‘a’, ‘b’, ‘r’, ‘a’] [‘d’, ‘r’, ‘b’, ‘b’, ‘a’, ‘r’, ‘a’, ‘a’, ‘a’, ‘a’, ‘c’]
Генерации числа с плавающей запятой — uniform()
random.uniform() похожа на randint(), но применяется для генерации числа с плавающей запятой в указанном диапазоне.
import random print(random.uniform(2.57, 3.8)) print(random.uniform(20.57, 30.8)) # Вывод: 3.307398107170489 28.91020719832224
Функция triangular()
Функция random.triangular() позволяет управлять вероятностью – она возвращает случайное число с плавающей запятой, которое соответствует заданному диапазону, а также уточняющему значению mode. Этот параметр дает возможность взвешивать возможный результат ближе к одному из двух других значений параметров. По умолчанию он находится посередине диапазона.
import random print(random.triangular(2.57, 3.8, 0.1)) print(random.triangular(2.57, 3.8, 0.000001)) print(random.triangular(2.57, 3.8, 100000)) # Вывод: 2.754036943795768 2.0948646011589727 186.20353644235672
Криптографическая зашита генератора случайных данных
Случайные числа, полученные при помощи модуля random в Питоне, не являются криптографически устойчивыми. Это означает, что криптоанализ позволяет предсказать какое число будет сгенерировано следующим. Попробуем исправить ситуацию.
Модуль secrets используется для генерации криптографически сильных случайных чисел, пригодных для управления данными , такими как пароли, аутентификации учетной записи, маркеры безопасности и так далее.
Его зачастую следует использовать вместо генератора псевдослучайных чисел по умолчанию в модуле random, который предназначен для моделирования и симуляции, а не безопасности или криптографии.
import secrets secretsGenerator = secrets.SystemRandom() random_number = secretsGenerator.randint(0, 50) print(random_number) random_number2 = secretsGenerator.randrange(4, 40, 4) print(random_number2) number_list = [6, 12, 18, 24, 30, 36, 42, 48, 54, 60] secure_choice = secretsGenerator.choice(number_list) print(secure_choice) secure_sample = secretsGenerator.sample(number_list, 3) print(secure_sample) secure_float = secretsGenerator.uniform(2.5, 25.5) print(secure_float) # Вывод: 3 4 48 [48, 42, 24] 16.43293639196964
Numpy.random — Генератор псевдослучайных чисел
Самый простой способ задать массив со случайными элементами — использовать функцию sample (или random, или random_sample, или ranf — это всё одна и та же функция).
Без аргументов возвращает просто число в промежутке [0, 1), с одним целым числом — одномерный массив, с кортежем — массив с размерами, указанными в кортеже (все числа — из промежутка [0, 1)).
Генерация случайного n-мерного массива вещественных чисел
numpy.random.rand()применяется для генерации массива случайных вещественных чисел в пределах заданного диапазона.
Также можно генерировать числа согласно различным распределениям (Гаусса, Парето и другие). Чаще всего нужно равномерное распределение, которое можно получить с помощь функции uniform.
Для начала необходимо установить Numpy.
pip install numpy
import numpy random_float_array = numpy.random.rand(2, 2) print(«2 X 2 массив случайных вещественных чисел в [0.0, 1.0] n», random_float_array, «n») random_float_array = numpy.random.uniform(25.5, 99.5, size=(3, 2)) print(«3 X 2 массив случайных вещественных чисел в [25.5, 99.5] n», random_float_array, «n») # Вывод: 2 X 2 массив случайных вещественных чисел в [0.0, 1.0] [[0.65381466 0.94942677] [0.48291731 0.1857905 ]] 3 X 2 массив случайных вещественных чисел в [25.5, 99.5] [[28.61664036 69.09697835] [62.59002522 73.23196535] [85.79502493 47.36728352]]
Генерация случайного n-мерного массива целых чисел
С помощью функции randint или random_integers можно создать массив из целых чисел. Аргументы: low, high, size: от какого, до какого числа (randint не включает в себя это число, а random_integers включает), и size — размеры массива.
import numpy random_integer_array = numpy.random.random_integers(1, 10, 5) print(«1-мерный массив случайных целых чисел n», random_integer_array,»n») random_integer_array = numpy.random.random_integers(1, 10, size=(3, 2)) print(«2-мерный массив случайных целых чисел n», random_integer_array) # Вывод: 1-мерный массив случайных целых чисел [ 4 10 1 10 5] 2-мерный массив случайных целых чисел [[ 7 4] [ 9 7] [ 6 10]]
Но здесь мы получим предупреждение о том, что функция устарела:
DeprecationWarning: This function is deprecated. Please call randint(1, 10 + 1) instead random_integer_array = numpy.random.random_integers(1, 10, 5)
Выбор случайного элемента из массива чисел или последовательности
Функция NumPy random.choice() используется для получения случайных выборок одномерного массива, который возвращается как случайные выборки массива NumPy. Эта функция генерирует случайные выборки, которые обычно используются в статистике данных, анализе данных, полях, связанных с данными, а также может использоваться в машинном обучении, байесовской статистике и т. д.
import numpy array =[10, 20, 30, 40, 50, 20, 40] single_random_choice = numpy.random.choice(array, size=1) print(«один случайный выбор из массива 1-D», single_random_choice) multiple_random_choice = numpy.random.choice(array, size=3, replace=False) print(«несколько случайных выборов из массива 1-D без замены», multiple_random_choice) multiple_random_choice = numpy.random.choice(array, size=3, replace=True) print(«несколько случайных выборов из массива 1-D с заменой», multiple_random_choice) # Вывод: один случайный выбор из массива 1-D [10] несколько случайных выборов из массива 1-D без замены [40 20 40] несколько случайных выборов из массива 1-D с заменой [30 20 20]
Генерация случайных универсальных уникальных ID
Универсальные уникальные идентификаторы, также известные как UUID, — это 128-битные числа, используемые для однозначной идентификации информации в компьютерных системах. UUID могут использоваться для обозначения широкого спектра элементов, включая документы, объекты, сеансы, токены, сущности и т. Д. Их также можно использовать в качестве ключей базы данных.
Эта библиотека генерирует уникальные идентификаторы на основе системного времени и сетевого адреса компьютера. Объект UUID неизменяем и содержит некоторые функции для создания различных уникальных идентификаторов.
UUID состоит из пяти компонентов, каждый из которых имеет фиксированную длину. Символ дефиса разделяет каждый компонент. Мы можем представить UUID в формате «8-4-4-4-12», где каждая из цифр представляет длину в шестнадцатеричном формате.
UUID Python, сгенерированный с помощью функции uuid4(), создается с использованием истинно случайного или псевдослучайного генератора. Поэтому вероятность повторения двух гуидов невелика. Когда UUID необходимо сгенерировать на отдельных машинах или мы хотим сгенерировать безопасные UUID, используйте UUID4 (). Он также используется для генерации криптографически безопасных случайных чисел.
import uuid # получить уникальный UUID safeId = uuid.uuid4() print(«безопасный уникальный id «, safeId) # Вывод: безопасный уникальный id 61f2682f-4cbf-4c1d-a571-d2094052f371
Источник: pythoninfo.ru
Модуль random
Модуль random предоставляет функции для генерации случайных чисел, букв, случайного выбора элементов последовательности.
random.seed([X], version=2) — инициализация генератора случайных чисел. Если X не указан, используется системное время.
random.getstate() — внутреннее состояние генератора.
random.setstate(state) — восстанавливает внутреннее состояние генератора. Параметр state должен быть получен функцией getstate().
random.getrandbits(N) — возвращает N случайных бит.
random.randrange(start, stop, step) — возвращает случайно выбранное число из последовательности.
random.randint(A, B) — случайное целое число N, A ≤ N ≤ B.
random.choice(sequence) — случайный элемент непустой последовательности.
random.shuffle(sequence, [rand]) — перемешивает последовательность (изменяется сама последовательность). Поэтому функция не работает для неизменяемых объектов.
random.sample(population, k) — список длиной k из последовательности population.
random.random() — случайное число от 0 до 1.
random.uniform(A, B) — случайное число с плавающей точкой, A ≤ N ≤ B (или B ≤ N ≤ A).
random.triangular(low, high, mode) — случайное число с плавающей точкой, low ≤ N ≤ high. Mode — распределение.
random.betavariate(alpha, beta) — бета-распределение. alpha>0, beta>0. Возвращает от 0 до 1.
random.expovariate(lambd) — экспоненциальное распределение. lambd равен 1/среднее желаемое. Lambd должен быть отличным от нуля. Возвращаемые значения от 0 до плюс бесконечности, если lambd положительно, и от минус бесконечности до 0, если lambd отрицательный.
random.gammavariate(alpha, beta) — гамма-распределение. Условия на параметры alpha>0 и beta>0.
random.gauss(значение, стандартное отклонение) — распределение Гаусса.
random.lognormvariate(mu, sigma) — логарифм нормального распределения. Если взять натуральный логарифм этого распределения, то вы получите нормальное распределение со средним mu и стандартным отклонением sigma. mu может иметь любое значение, и sigma должна быть больше нуля.
random.normalvariate(mu, sigma) — нормальное распределение. mu — среднее значение, sigma — стандартное отклонение.
random.vonmisesvariate(mu, kappa) — mu — средний угол, выраженный в радианах от 0 до 2π, и kappa — параметр концентрации, который должен быть больше или равен нулю. Если каппа равна нулю, это распределение сводится к случайному углу в диапазоне от 0 до 2π.
random.paretovariate(alpha) — распределение Парето.
random.weibullvariate(alpha, beta) — распределение Вейбулла.
Все довольно просто, и теперь вы можете генерировать случайные числа и последовательности. Удачи в ваших изысканиях!
Для вставки кода на Python в комментарий заключайте его в теги
Источник: pythonworld.ru