Модуль 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) \) |