Случайный Generator#
The Generator предоставляет доступ к
широкому спектру распределений и служит заменой для
RandomStateОсновное различие между ними заключается в том, что Generator полагается на дополнительный BitGenerator для
управления состоянием и генерации случайных битов, которые затем преобразуются в
случайные значения из полезных распределений. BitGenerator по умолчанию, используемый
Generator является PCG64. BitGenerator
можно изменить, передав инициализированный BitGenerator в Generator.
- numpy.random.default_rng(seed=None)#
Создать новый Generator с генератором битов по умолчанию (PCG64).
- Параметры:
- seed{None, int, array_like[ints], SeedSequence, BitGenerator, Generator, RandomState}, опционально
Семя для инициализации
BitGenerator. Если None, то свежая, непредсказуемая энтропия будет взята из ОС. Еслиintилиarray_like[ints]передано, то все значения должны быть неотрицательными и будут переданы вSeedSequenceдля получения начальногоBitGeneratorсостояние. Также можно передатьSeedSequenceэкземпляр. Кроме того, при передачеBitGenerator, он будет обернутGenerator. Если передатьGenerator, он будет возвращен без изменений. При передаче устаревшегоRandomStateэкземпляр будет приведен к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)
Здесь мы используем
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])
Здесь мы указываем 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]])
- класс numpy.random.Generator(bit_generator)#
Контейнер для BitGenerators.
Generatorпредоставляет ряд методов для генерации случайных чисел, извлеченных из различных распределений вероятностей. В дополнение к специфичным для распределения аргументам, каждый метод принимает аргумент ключевого слова размер который по умолчанию равенNone. Если размер являетсяNone, затем генерируется и возвращается одно значение. Если размер является целым числом, то возвращается 1-D массив, заполненный сгенерированными значениями. Если размер является кортежем, то массив с такой формой заполняется и возвращается.Функция
numpy.random.default_rngсоздастGeneratorс настройками по умолчанию numpyBitGenerator.Гарантия совместимости отсутствует
Generatorне предоставляет гарантии совместимости версий. В частности, по мере развития лучших алгоритмов битовый поток может измениться.- Параметры:
- bit_generatorBitGenerator
BitGenerator для использования в качестве основного генератора.
Смотрите также
default_rngРекомендуемый конструктор для
Generator.
Примечания
Модуль стандартной библиотеки Python
randomсодержит генератор псевдослучайных чисел с рядом методов, которые похожи на доступные вGenerator. Он использует вихрь Мерсенна, и этот генератор битов можно получить с помощьюMT19937.Generator, помимо того, что он поддерживает NumPy, имеет преимущество в том, что предоставляет гораздо большее количество распределений вероятностей на выбор.Примеры
>>> from numpy.random import Generator, PCG64 >>> rng = Generator(PCG64()) >>> rng.standard_normal() -0.203 # random
Доступ к BitGenerator и создание#
Получает экземпляр генератора битов, используемый генератором |
|
|
Создать новые независимые дочерние генераторы. |
Простые случайные данные#
|
Возвращает случайные целые числа из низкий (включительно) до высокий (исключительно), или если endpoint=True, низкий (включительно) до высокий (включительно). |
|
Возвращает случайные числа с плавающей запятой в полуоткрытом интервале [0.0, 1.0). |
|
Генерирует случайную выборку из заданного массива |
|
Возвращает случайные байты. |
Перестановки#
Методы для случайной перестановки последовательности:
|
Изменяет массив или последовательность на месте, перемешивая его содержимое. |
|
Случайно переставить последовательность или вернуть переставленный диапазон. |
|
Случайная перестановка x вдоль оси ось. |
Следующая таблица суммирует поведение методов.
метод |
копирование/на месте |
обработка оси |
|---|---|---|
перемешивание |
на месте |
как если бы одномерный |
был удален из основного пространства имен. Используйте |
copy |
как если бы одномерный |
переставленный |
либо (используйте 'out' для замены на месте) |
независимый от оси |
Следующие подразделы предоставляют более подробную информацию о различиях.
На месте vs. копирование#
Основное различие между Generator.shuffle и Generator.permutation
заключается в том, что Generator.shuffle работает на месте, в то время как Generator.permutation
возвращает копию.
По умолчанию, Generator.permuted возвращает копию. Для работы на месте с
Generator.permuted, передайте тот же массив в качестве первого аргумента и как
значение out параметр. Например,
>>> import numpy as np
>>> 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 переупорядочит столбцы. Например
>>> import numpy as np
>>> 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:
>>> import numpy as np
>>> rng = np.random.default_rng()
>>> 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, он перемешивает эту последовательность на месте.
>>> import numpy as np
>>> 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-распределения. |
|
Генерация случайных выборок из нормального (гауссовского) распределения. |
|
Извлечение выборок из распределения Парето II (также известного как Ломака) с заданной формой. |
|
Извлечение выборок из распределения Пуассона. |
|
Генерирует выборки в [0, 1] из степенного распределения с положительным показателем a - 1. |
|
Извлечение выборок из распределения Рэлея. |
|
Извлеките выборки из стандартного распределения Коши с модой = 0. |
|
Извлечь выборки из стандартного экспоненциального распределения. |
|
Извлечь выборки из стандартного гамма-распределения. |
|
Извлечь выборки из стандартного нормального распределения (среднее=0, стандартное отклонение=1). |
|
Извлечение выборок из стандартного распределения Стьюдента с df степени свободы. |
|
Извлечь выборки из треугольного распределения на интервале |
|
Извлекайте выборки из равномерного распределения. |
|
Взятие выборок из распределения фон Мизеса. |
|
Генерация выборок из распределения Вальда или обратного гауссовского распределения. |
|
Извлечь выборки из распределения Вейбулла. |
|
Генерация выборок из распределения Ципфа. |