Генератор случайных чисел
Класс Generator предоставляет доступ к широкому спектру распределений и служит заменой для RandomState. Основное различие между ними заключается в том, что Generator использует дополнительный генератор случайных битов (BitGenerator) для управления состоянием и генерации случайных битов, которые затем преобразуются в случайные значения из полезных распределений. По умолчанию Generator использует генератор PCG64. Генератор случайных битов можно изменить, передав экземпляр BitGenerator в Generator.
- numpy.random.default_rng(seed=None)
-
Создаёт новый генератор со стандартным генератором случайных битов (PCG64).
- Параметры:
-
- seed{None, int, array_like[ints], SeedSequence, BitGenerator, Generator}, необязательный
-
Семена для инициализации
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'>
Здесь мы задаём seed, чтобы получить воспроизводимые результаты:
>>> 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]])
- classnumpy.random.Generator(bit_generator)
-
Контейнер для генераторов случайных битов.
Generatorпредоставляет ряд методов для генерации случайных чисел, взятых из различных вероятностных распределений. Помимо аргументов, специфичных для распределений, каждый метод принимает ключевой аргументsize, который по умолчаниюNone. ЕслиsizeравенNone, то генерируется и возвращается одно значение. Еслиsize— целое число, то возвращается одномерный массив, заполненный сгенерированными значениями. Еслиsize— кортеж, то возвращается массив с указанной формой.Функция
numpy.random.default_rngсоздастGeneratorс стандартным генератором случайных битов NumPy.Гарантия совместимости отсутствует
Generatorне гарантирует совместимость версий. В частности, по мере появления лучших алгоритмов поток битов может измениться.- Параметры:
-
- bit_generatorBitGenerator
-
Генератор случайных битов для использования в качестве основного генератора.
См. также
default_rng-
Рекомендуемый конструктор для
Generator.
Примечания
Модуль Python stdlib
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–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/reference/random/generator.html