Spec-Zone.ru › NumPy 2.0

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

Класс 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

Доступ к генератору случайных битов и создание дочерних генераторов

bit_generator

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

spawn(n_children)

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

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

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

Spec-Zone.ru

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