Генерация псевдослучайных числел

Модуль numpy.random дополняет встроенный в Python модуль random функциями для эффективной для эффективной генерации целых массивов выборок, подчиненых многим видам вероятностных распределений. Например, можно получить массив размера \( 4\times 4 \) выборок из нормального распределения, используя функцию normal:

In [171]: samples = np.random.normal(size=(4, 4))

In [172]: samples
Out[172]: 
array([[-1.34227933, -0.19399381,  0.03387371, -0.08797433],
       [ 0.93296259,  0.25866046,  0.08337615,  0.85956704],
       [-0.52511101,  0.47723459,  1.68167773, -0.11159956],
       [-0.59314399,  0.90182334, -1.36131921,  0.14753701]])

Встроенный модуль random генерирует только одно число за раз. Как видно из приведенного ниже теста, numpy.random на порядок быстрее генерирует очень большие выборки:

In [173]: from random import normalvariate

In [174]: N = 1000000

In [175]: %timeit samples = [normalvariate(0, 1) for _ in range(N)]
715 ms ± 262 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [176]: %timeit np.random.normal(size=N)
38.7 ms ± 748 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

163/5000 Мы говорим, что это псевдослучайные числа, потому что они генерируются алгоритмом с детерминированным поведением на основе начального (seed) числа генератора случайных чисел. Можно изменить начальное число генератора случайных чисел, используя функцию np.random.seed:

In [177]: np.random.seed(1234)

Функция, генерирующие данные, из numpy.random используют глобальное начальное число. Чтобы избежать глобального состояния, вы можете использовать np.random.RandomState для создания генератора случайных чисел, изолированного от других:

In [178]: rng = np.random.RandomState(1234)

In [179]: rng.randn(10)
Out[179]: 
array([ 0.47143516, -1.19097569,  1.43270697, -0.3126519 , -0.72058873,
        0.88716294,  0.85958841, -0.6365235 ,  0.01569637, -2.24268495])

В таблице numpy:pseudornd:tbl:1 представлены некоторые функции модуля numpy.random.

Таблица 7. Некоторые функции модуля numpy.random

Функция Описание
seed Начальная точка генератора случайных чисел
permutation Возвращает случайную перестановку последовательности или возвращает переставленный диапазон
shuffle Произвольно переставляет последовательность
rand Генерирует выборку из равномерного распределения
randint Генерирует случайные целые числа из заданного интервала
randn Генерирует выборку из нормального распределения со средним значением \( 0 \) и стандартным отклонением \( 1 \)
binomial Генерирует выборку из биномиального распределения
normal Генерирует выборку из нормального (гауссового) распределения
beta Генерирует выборку из \( \beta \)-распределения
chisquare Генерирует выборку из \( \chi^2 \)-распределения
gamma Генерирует выборку из \( \Gamma \)-распределения
uniform Генерирует выборку из равномерного распределения на \( [0, 1) \)