Случайный 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 с настройками по умолчанию numpy BitGenerator.

Гарантия совместимости отсутствует

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 и создание#

bit_generator

Получает экземпляр генератора битов, используемый генератором

spawn(n_children)

Создать новые независимые дочерние генераторы.

Простые случайные данные#

integers(low[, high, size, dtype, endpoint])

Возвращает случайные целые числа из низкий (включительно) до высокий (исключительно), или если endpoint=True, низкий (включительно) до высокий (включительно).

random([size, dtype, out])

Возвращает случайные числа с плавающей запятой в полуоткрытом интервале [0.0, 1.0).

choice(a[, size, replace, p, axis, shuffle])

Генерирует случайную выборку из заданного массива

bytes(длина)

Возвращает случайные байты.

Перестановки#

Методы для случайной перестановки последовательности:

shuffle(x[, axis])

Изменяет массив или последовательность на месте, перемешивая его содержимое.

permutation(x[, axis])

Случайно переставить последовательность или вернуть переставленный диапазон.

permuted(x[, axis, out])

Случайная перестановка 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

Распределения#

beta(a, b[, size])

Извлечь выборки из бета-распределения.

binomial(n, p[, size])

Генерация выборок из биномиального распределения.

chisquare(df[, size])

Генерирует выборки из распределения хи-квадрат.

dirichlet(alpha[, size])

Извлечь выборки из распределения Дирихле.

exponential([scale, size])

Извлечение выборок из экспоненциального распределения.

f(dfnum, dfden[, size])

Извлечение выборок из распределения Фишера.

gamma(shape[, scale, size])

Извлечение выборок из гамма-распределения.

geometric(p[, size])

Извлечение выборок из геометрического распределения.

gumbel([loc, scale, size])

Генерировать выборки из распределения Гумбеля.

hypergeometric(ngood, nbad, nsample[, size])

Извлечь выборки из гипергеометрического распределения.

laplace([loc, scale, size])

Извлечение выборок из распределения Лапласа или двойного экспоненциального распределения с указанным местоположением (или средним) и масштабом (затуханием).

logistic([loc, scale, size])

Извлечь выборки из логистического распределения.

lognormal([mean, sigma, size])

Извлечь выборки из логнормального распределения.

logseries(p[, size])

Извлечь выборки из логарифмического серийного распределения.

multinomial(n, pvals[, size])

Извлеките выборки из мультиномиального распределения.

multivariate_hypergeometric(colors, nsample)

Генерация вариантов из многомерного гипергеометрического распределения.

multivariate_normal(mean, cov[, size, ...])

Сгенерировать случайные выборки из многомерного нормального распределения.

negative_binomial(n, p[, size])

Извлекать выборки из отрицательного биномиального распределения.

noncentral_chisquare(df, nonc[, size])

Извлеките выборки из нецентрального распределения хи-квадрат.

noncentral_f(dfnum, dfden, nonc[, size])

Генерация выборок из нецентрального F-распределения.

normal([loc, scale, size])

Генерация случайных выборок из нормального (гауссовского) распределения.

pareto(a[, size])

Извлечение выборок из распределения Парето II (также известного как Ломака) с заданной формой.

poisson([lam, size])

Извлечение выборок из распределения Пуассона.

power(a[, size])

Генерирует выборки в [0, 1] из степенного распределения с положительным показателем a - 1.

rayleigh([scale, size])

Извлечение выборок из распределения Рэлея.

standard_cauchy([size])

Извлеките выборки из стандартного распределения Коши с модой = 0.

standard_exponential([size, dtype, method, out])

Извлечь выборки из стандартного экспоненциального распределения.

standard_gamma(shape[, size, dtype, out])

Извлечь выборки из стандартного гамма-распределения.

standard_normal([size, dtype, out])

Извлечь выборки из стандартного нормального распределения (среднее=0, стандартное отклонение=1).

standard_t(df[, size])

Извлечение выборок из стандартного распределения Стьюдента с df степени свободы.

triangular(left, mode, right[, size])

Извлечь выборки из треугольного распределения на интервале [left, right].

uniform([low, high, size])

Извлекайте выборки из равномерного распределения.

vonmises(mu, kappa[, size])

Взятие выборок из распределения фон Мизеса.

wald(mean, scale[, size])

Генерация выборок из распределения Вальда или обратного гауссовского распределения.

weibull(a[, size])

Извлечь выборки из распределения Вейбулла.

zipf(a[, size])

Генерация выборок из распределения Ципфа.