Метод multivariate_normal класса Generator
Метод multivariate_normal класса Generator
генерирует случайные выборки из многомерного нормального
(гауссовского) распределения. Первым параметром метод принимает
вектор средних значений mean, вторым параметром -
ковариационную матрицу cov. Третьим параметром можно
задать размер выборки size.
Синтаксис
generator.multivariate_normal(mean, cov, size)
Пример
Давайте сгенерируем одномерную выборку из нормального распределения со средним 0 и дисперсией 1, используя ковариационную матрицу размером 1x1:
import numpy as np
rng = np.random.default_rng(0)
arr = rng.multivariate_normal([0], [[1]], 5)
print(arr)
Результат выполнения кода:
[ 1.40117699 -0.16243487 1.52037681 1.09613883 0.60589957]
Пример
Теперь сгенерируем двумерные точки с заданными средними и ковариационной
матрицей. Вектор средних mean задаёт центр распределения,
а ковариационная матрица cov - его форму и ориентацию:
import numpy as np
rng = np.random.default_rng(1)
mean = [0, 5]
cov = [[2, 1.5], [1.5, 3]]
arr = rng.multivariate_normal(mean, cov, 6)
print(arr)
Результат выполнения кода:
[[ 1.31596046 5.40432722]
[-1.0889086 6.15468733]
[-1.06749409 4.67356926]
[ 0.96764783 6.30087361]
[-1.90507477 1.56999544]
[ 1.65722974 8.48334024]]
Пример
Можно указать размер выборки как кортеж, чтобы получить многомерный массив. Например, сгенерируем трёхмерную выборку размером 2x3:
import numpy as np
rng = np.random.default_rng(2)
mean = [1, -1, 2]
cov = [[0.5, 0, 0], [0, 1, 0.2], [0, 0.2, 0.8]]
arr = rng.multivariate_normal(mean, cov, (2, 3))
print(arr)
Результат выполнения кода:
[[[ 2.39862296 -1.40709463 1.73523018]
[ 1.80923274 -1.90610292 1.59330388]
[ 1.65914312 -1.12102022 0.88363488]]
[[ 0.28295938 -2.05793818 1.85225378]
[ 1.01444293 -2.16867456 1.93941963]
[ 1.8765384 -1.58468255 2.1029787 ]]]
Пример
Ковариационная матрица должна быть симметричной и положительно определённой. Если передать некорректную матрицу, метод вызовет ошибку. Давайте проверим это на примере:
import numpy as np
rng = np.random.default_rng(3)
try:
mean = [1, 2]
cov = [[1, 3], [3, 1]]
arr = rng.multivariate_normal(mean, cov, 3)
print(arr)
except np.linalg.LinAlgError as e:
print("Error:", str(e))
Результат выполнения кода:
"Error: 1-th leading minor of the array is not positive definite"
Смотрите также
-
класс
Generator,
который предоставляет методы для генерации случайных чисел -
метод
normal,
который генерирует выборки из одномерного нормального распределения -
метод
standard_normal,
который генерирует выборки из стандартного нормального распределения -
метод
random,
который генерирует случайные числа из равномерного распределения