Генератор случайных чисел
Класс Generator предоставляет доступ к широкому спектру распределений и служит заменой для RandomState. Основное различие между ними заключается в том, что Generator опирается на дополнительный генератор битов для управления состоянием и генерации случайных битов, которые затем преобразуются в случайные значения из полезных распределений. По умолчанию в Generator используется генератор битов PCG64. Генератор битов можно изменить, передав экземпляр генератора битов в Generator.
- numpy.random.default_rng()
-
Создаёт новый генератор с генератором битов по умолчанию (PCG64).
- Параметры
-
- seed{None, int, array_like[ints], SeedSequence, BitGenerator, Generator}, optional
-
Зерно для инициализации
BitGenerator. Если None, то из ОС будет получена свежая, непредсказуемая энтропия. Если передаётсяintилиarray_like[ints], то она будет передана вSeedSequenceдля вывода начального состоянияBitGenerator. Можно также передать экземплярSeedSequence. Кроме того, при передачеBitGenerator, он будет обернут вGenerator. Если передаётсяGenerator, то он будет возвращён без изменений.
- Возвращаемое значение
-
- Generator
-
Инициализированный объект генератора.
Примечания
Если
seedне являетсяBitGeneratorилиGenerator, будет создан новыйBitGenerator. Эта функция не управляет глобальным экземпляром по умолчанию.Примеры
default_rng— рекомендуемый конструктор для класса генератора случайных чиселGenerator. Вот несколько способов создания генератора случайных чисел с помощьюdefault_rngи классаGenerator.Вот как используется
default_rngдля генерации случайного числа с плавающей точкой:>>> import numpy as np >>> rng = np.random.default_rng(12345) >>> print(rng) Generator(PCG64) >>> rfloat = rng.random() >>> rfloat 0.22733602246716966 >>> type(rfloat) <class 'float'>
Вот как используется
default_rngдля генерации 3 случайных целых чисел в диапазоне от 0 (включительно) до 10 (исключительно):>>> import numpy as np >>> rng = np.random.default_rng(12345) >>> rints = rng.integers(low=0, high=10, size=3) >>> rints array([6, 2, 7]) >>> type(rints[0]) <class 'numpy.int64'>
Здесь мы задаём зерно, чтобы получить воспроизводимые результаты:
>>> import numpy as np >>> rng = np.random.default_rng(seed=42) >>> print(rng) Generator(PCG64) >>> arr1 = rng.random((3, 3)) >>> arr1 array([[0.77395605, 0.43887844, 0.85859792], [0.69736803, 0.09417735, 0.97562235], [0.7611397 , 0.78606431, 0.12811363]])Если мы выйдем и перезапустим интерпретатор Python, то увидим, что получаем те же случайные числа снова:
>>> import numpy as np >>> rng = np.random.default_rng(seed=42) >>> arr2 = rng.random((3, 3)) >>> arr2 array([[0.77395605, 0.43887844, 0.85859792], [0.69736803, 0.09417735, 0.97562235], [0.7611397 , 0.78606431, 0.12811363]])
- class numpy.random.Generator(bit_generator)
-
Контейнер для генераторов битов.
Generatorпредоставляет ряд методов для генерации случайных чисел, взятых из различных вероятностных распределений. Помимо аргументов, специфичных для распределения, каждый метод принимает ключевой аргументsize, который по умолчанию равенNone. ЕслиsizeравенNone, то генерируется и возвращается одно значение. Еслиsizeявляется целым числом, то возвращается одномерный массив, заполненный сгенерированными значениями. Еслиsizeявляется кортежем, то возвращается массив с заданной формой.Функция
numpy.random.default_rngсоздаётGeneratorс генератором битов по умолчанию NumPyBitGenerator.Гарантия совместимости отсутствует
Generatorне гарантирует совместимость между версиями. В частности, по мере разработки лучших алгоритмов битовый поток может измениться.- Параметры
-
- bit_generatorBitGenerator
-
Генератор битов, который будет использоваться в качестве основного генератора.
См. также
default_rng-
Рекомендуемый конструктор для
Generator.
Примечания
Модуль Python
randomсодержит генератор псевдослучайных чисел с рядом методов, аналогичных методам вGenerator. Он использует генератор Мерсенна Твистера, к которому можно получить доступ с помощьюMT19937.Generator, кроме того, что он является NumPy-совместимым, имеет преимущество в том, что предоставляет гораздо больше вероятностных распределений для выбора.Примеры
>>> from numpy.random import Generator, PCG64 >>> rng = Generator(PCG64()) >>> rng.standard_normal() -0.203 # random
Доступ к генератору битов
Получение экземпляра генератора битов, используемого генератором. |
Простые случайные данные
| Возвращает случайные целые числа от |
| Возвращает случайные числа с плавающей точкой в полуоткрытом интервале [0.0, 1.0). |
| Генерирует случайную выборку из заданного массива |
| Возвращает случайные байты. |
Перестановки
Методы для случайной перестановки последовательности:
| Изменяет массив или последовательность на месте, перемешивая его содержимое. |
| Случайно переупорядочивает последовательность или возвращает переупорядоченный диапазон. |
| Случайно переупорядочивает |
Следующая таблица обобщает поведение методов.
метод | копия/на месте | обработка оси |
|---|---|---|
shuffle | на месте | как будто 1d |
permutation | копия | как будто 1d |
permuted | либо (используйте ‘out’ для на месте) | независимо от оси |
В следующих разделах приведены дополнительные сведения о различиях.
Изменение на месте или создание копии
Основное различие между Generator.shuffle и Generator.permutation заключается в том, что Generator.shuffle работает на месте, в то время как Generator.permutation возвращает копию.
По умолчанию Generator.permuted возвращает копию. Чтобы работать на месте с Generator.permuted, передайте тот же массив как первый аргумент *и* как значение параметра out. Например,
>>> rng = np.random.default_rng()
>>> x = np.arange(0, 15).reshape(3, 5)
>>> x
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
>>> y = rng.permuted(x, axis=1, out=x)
>>> x
array([[ 1, 0, 2, 4, 3], # random
[ 6, 7, 8, 9, 5],
[10, 14, 11, 13, 12]])
Обратите внимание, что когда out предоставлен, возвращаемое значение out:
>>> y is x True
Обработка параметра axis
Важное различие для этих методов заключается в том, как они обрабатывают параметр axis. И Generator.shuffle, и Generator.permutation рассматривают входные данные как одномерную последовательность, а параметр axis определяет, какую размерность входного массива использовать в качестве последовательности. В случае двумерного массива axis=0 фактически переупорядочит строки массива, а axis=1 переупорядочит столбцы. Например
>>> rng = np.random.default_rng()
>>> x = np.arange(0, 15).reshape(3, 5)
>>> x
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
>>> rng.permutation(x, axis=1)
array([[ 1, 3, 2, 0, 4], # random
[ 6, 8, 7, 5, 9],
[11, 13, 12, 10, 14]])
Обратите внимание, что столбцы были переупорядочены «в целом»: значения в каждом столбце не изменились.
Метод Generator.permuted обрабатывает параметр axis аналогично тому, как numpy.sort его обрабатывает. Каждый срез вдоль заданной оси перемешивается независимо от других. Сравните следующий пример использования Generator.permuted с приведенным выше примером использования Generator.permutation:
>>> rng.permuted(x, axis=1)
array([[ 1, 0, 2, 4, 3], # random
[ 5, 7, 6, 9, 8],
[10, 14, 12, 13, 11]])
В этом примере значения в каждой строке (т.е. значения вдоль axis=1) были перемешаны независимо. Это не «массовое» перемешивание столбцов.
Перемешивание последовательностей, не являющихся NumPy
Generator.shuffle работает с последовательностями, не являющимися NumPy. То есть, если ему передана последовательность, которая не является массивом NumPy, он перемешивает эту последовательность на месте. Например,
>>> rng = np.random.default_rng() >>> a = ['A', 'B', 'C', 'D', 'E'] >>> rng.shuffle(a) # shuffle the list in-place >>> a ['B', 'D', 'A', 'E', 'C'] # random
Распределения
| Генерация выборок из бета-распределения. |
| Генерация выборок из биномиального распределения. |
| Генерация выборок из хи-квадрат распределения. |
| Генерация выборок из дирихлевого распределения. |
| Генерация выборок из экспоненциального распределения. |
| Генерация выборок из F-распределения. |
| Генерация выборок из гамма-распределения. |
| Генерация выборок из геометрического распределения. |
| Генерация выборок из распределения Гумбеля. |
| Генерация выборок из гипергеометрического распределения. |
| Генерация выборок из распределения Лапласа или двойного экспоненциального распределения с заданной локацией (или средним значением) и масштабом (убыванием). |
| Генерация выборок из логистического распределения. |
| Генерация выборок из логнормального распределения. |
| Генерация выборок из логарифмического ряда распределения. |
| Генерация выборок из многономиального распределения. |
| Генерация выборок из многомерного гипергеометрического распределения. |
| Генерация случайных выборок из многомерного нормального распределения. |
| Генерация выборок из отрицательного биномиального распределения. |
| Генерация выборок из нецентрального хи-квадрат распределения. |
| Генерация выборок из нецентрального F-распределения. |
| Генерация случайных выборок из нормального (гауссового) распределения. |
| Генерация выборок из распределения Парето II или Ломакса с заданной формой. |
| Генерация выборок из пуассоновского распределения. |
| Генерация выборок в интервале [0, 1] из распределения степени с положительным показателем a - 1. |
| Генерация выборок из распределения Рейли. |
| Генерация выборок из стандартного распределения Коши с модой = 0. |
| Генерация выборок из стандартного экспоненциального распределения. |
| Генерация выборок из стандартного гамма-распределения. |
| Генерация выборок из стандартного нормального распределения (среднее=0, стандартное отклонение=1). |
| Генерация выборок из стандартного распределения Стьюдента с |
| Генерация выборок из треугольного распределения на интервале |
| Генерация выборок из равномерного распределения. |
| Генерация выборок из распределения фон Мизеса. |
| Генерация выборок из распределения Вальда, или обратного гауссова распределения. |
| Генерация выборок из распределения Вейбулла. |
| Генерация выборок из распределения ЗИФфа. |
© 2005–2022 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.21/reference/random/generator.html