Генератор случайных чисел
Класс Generator предоставляет доступ к широкому спектру распределений и служит заменой для RandomState. Основное различие между ними заключается в том, что Generator полагается на дополнительный BitGenerator для управления состоянием и генерации случайных битов, которые затем преобразуются в случайные значения из полезных распределений. По умолчанию Generator использует PCG64 в качестве BitGenerator. BitGenerator можно изменить, передав экземпляр BitGenerator в Generator.
-
numpy.random.default_rng() -
Создаёт новый Generator с используемым по умолчанию BitGenerator (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) -
Контейнер для BitGenerators.
Generatorпредоставляет множество методов для генерации случайных чисел, взятых из различных вероятностных распределений. В дополнение к аргументам, специфичным для распределения, каждый метод принимает ключевой аргументsize, который по умолчанию равенNone. ЕслиsizeравноNone, то генерируется и возвращается одно значение. Еслиsize— целое число, то возвращается одномерный массив, заполненный сгенерированными значениями. Еслиsize— кортеж, то возвращается массив с соответствующей формой, заполненный значениями.Функция
numpy.random.default_rngсоздастGeneratorс используемым по умолчанию в NumPyBitGenerator.Гарантия совместимости отсутствует
Generatorне гарантирует совместимость версий. В частности, по мере появления лучших алгоритмов битовый поток может меняться.- Параметры
-
-
bit_generatorBitGenerator -
BitGenerator, который используется в качестве основного генератора.
-
См. также
-
default_rng -
Рекомендуемый конструктор для
Generator.
Примечания
Модуль Python stdlib
randomсодержит генератор псевдослучайных чисел с рядом методов, похожих на методы, доступные вGenerator. Он использует Mersenne Twister, и к этому генератору можно получить доступ с помощьюMT19937.Generator, помимо того, что он NumPy-совместимый, имеет преимущество в том, что предоставляет гораздо больше вероятностных распределений для выбора.Примеры
>>> from numpy.random import Generator, PCG64 >>> rg = Generator(PCG64()) >>> rg.standard_normal() -0.203 # random
Доступ к BitGenerator
Получает экземпляр генератора битов, используемый генератором |
Простые случайные данные
| Возвращает случайные целые числа от |
| Возвращает случайные числа с плавающей точкой в полуоткрытом интервале [0.0, 1.0). |
| Генерирует случайную выборку из заданного одномерного массива |
| Возвращает случайные байты. |
Перестановки
Методы для случайной перестановки последовательности:
| Модифицирует массив или последовательность на месте, перемешивая его содержимое. |
| Случайная перестановка последовательности или возвращает перестановку диапазона. |
| Случайная перестановка |
В следующей таблице подытоживается поведение методов.
метод | копия/на месте | обработка осей |
|---|---|---|
shuffle | на месте | как будто одномерный |
permutation | копия | как будто одномерный |
permuted | либо (используйте ‘out’ для на месте) | независимо от оси |
Следующие разделы содержат более подробную информацию о различиях.
На месте или копия
Основное различие между Generator.shuffle и Generator.permutation состоит в том, что Generator.shuffle работает на месте, а Generator.permutation возвращает копию.
По умолчанию Generator.permuted возвращает копию. Для работы на месте с Generator.permuted, передайте тот же массив в качестве первого аргумента *и* в качестве значения параметра out. Например,
>>> rg = 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 = rg.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 переупорядочит столбцы. Например
>>> rg = 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]])
>>> rg.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:
>>> rg.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, он перемешивает эту последовательность на месте. Например,
>>> rg = np.random.default_rng() >>> a = ['A', 'B', 'C', 'D', 'E'] >>> rg.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–2021 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.20/reference/random/generator.html