Spec-Zone.ru › NumPy 1.21

Генератор случайных чисел

Класс 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 с генератором битов по умолчанию NumPy BitGenerator.

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

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

Доступ к генератору битов

bit_generator

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

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

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

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

random([size, dtype, out])

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

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

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

bytes(length)

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

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

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

shuffle(x[, axis])

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

permutation(x[, axis])

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

permuted(x[, axis, out])

Случайно переупорядочивает x по оси axis.

Следующая таблица обобщает поведение методов.

метод

копия/на месте

обработка оси

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

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

beta(a, b[, size])

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

binomial(n, p[, size])

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

chisquare(df[, size])

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

dirichlet(alpha[, size])

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

exponential([scale, size])

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

f(dfnum, dfden[, size])

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

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])

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

© 2005–2022 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.21/reference/random/generator.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API