Spec-Zone.ru › NumPy 1.20

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

Класс 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 с используемым по умолчанию в NumPy BitGenerator.

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

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

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

на месте

как будто одномерный

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

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

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–2021 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.20/reference/random/generator.html

Spec-Zone.ru

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