numpy.random.Generator.multivariate_normal
метод
-
random.Generator.multivariate_normal(mean, cov, size=None, check_valid='warn', tol=1e-8, *, method='svd') -
Генерация случайных выборок из многомерного нормального распределения.
Многомерное нормальное, или гауссово, распределение является обобщением одномерного нормального распределения на многомерный случай. Такое распределение задается средним значением и ковариационной матрицей. Эти параметры аналогичны среднему (среднее значение или «центр») и дисперсии (стандартное отклонение или «ширина» в квадрате) одномерного нормального распределения.
- Параметры
-
-
mean1-D array_like, of length N -
Среднее значение N-мерного распределения.
-
cov2-D array_like, of shape (N, N) -
Ковариационная матрица распределения. Она должна быть симметричной и положительно определенной для корректной генерации выборок.
-
sizeint or tuple of ints, optional -
Указав, например, форму
(m,n,k), генерируютсяm*n*kвыборок, упакованных в структуру размеромm×n×k. Так как каждая выборка имеет размерN, размер выходного массива составляет(m,n,k,N). Если форма не указана, возвращается одна (N-мерная) выборка. -
check_valid{ ‘warn’, ‘raise’, ‘ignore’ }, optional -
Поведение при работе с ковариационной матрицей, которая не является положительно определенной.
-
tolfloat, optional -
Допуск при проверке собственных значений в ковариационной матрице. cov приводится к типу double перед проверкой.
-
method{ ‘svd’, ‘eigh’, ‘cholesky’}, optional -
Входной параметр cov используется для вычисления матрицы A, такой что
A @ A.T = cov. Данный параметр используется для выбора метода вычисления матрицы A. По умолчанию используется метод ‘svd’, который самый медленный, в то время как ‘cholesky’ — самый быстрый, но менее надёжный, чем самый медленный метод. Методeighиспользует разложение по собственным значениям для вычисления A и быстрее, чем svd, но медленнее, чем cholesky.Доступно с версии 1.18.0.
-
- Возвращаемое значение
-
-
outndarray -
Сгенерированные выборки, имеющие форму size, если она была задана. В противном случае, форма составляет
(N,).Другими словами, каждый элемент
out[i,j,...,:]представляет собой N-мерное значение, сгенерированное из распределения.
-
Примечания
Среднее значение представляет собой координату в N-мерном пространстве, которая отражает расположение, где выборки наиболее вероятны. Это аналогично пику кривой Гаусса для одномерного или унивариатного нормального распределения.
Ковариация указывает на уровень совместного изменения двух переменных. Из многомерного нормального распределения мы извлекаем N-мерные выборки
. Элемент ковариационной матрицы
представляет собой ковариацию
и
. Элемент
— дисперсия
(т.е. ее «разброс»).
Вместо указания полной ковариационной матрицы можно использовать популярные приближения:
- Сферическая ковариация (
cov— кратная единичной матрице) - Диагональная ковариация (
covимеет неотрицательные элементы только на диагонали)
Данное геометрическое свойство можно увидеть в двух измерениях, нарисовав точки сгенерированных данных:
>>> mean = [0, 0] >>> cov = [[1, 0], [0, 100]] # diagonal covariance
Диагональная ковариация означает, что точки ориентированы вдоль осей x или y:
>>> import matplotlib.pyplot as plt >>> x, y = np.random.default_rng().multivariate_normal(mean, cov, 5000).T >>> plt.plot(x, y, 'x') >>> plt.axis('equal') >>> plt.show()Обратите внимание, что ковариационная матрица должна быть положительно полуопределённой (т.е. неотрицательно определённой). В противном случае поведение этого метода не определено, и обратная совместимость не гарантируется.
Ссылки
-
1 -
Papoulis, A., “Probability, Random Variables, and Stochastic Processes,” 3rd ed., New York: McGraw-Hill, 1991.
-
2 -
Duda, R. O., Hart, P. E., and Stork, D. G., “Pattern Classification,” 2nd ed., New York: Wiley, 2001.
Примеры
>>> mean = (1, 2) >>> cov = [[1, 0], [0, 1]] >>> rng = np.random.default_rng() >>> x = rng.multivariate_normal(mean, cov, (3, 3)) >>> x.shape (3, 3, 2)
Можно использовать другой метод, отличный от стандартного, для факторизации cov: >>> y = rng.multivariate_normal(mean, cov, (3, 3), method=’cholesky’) >>> y.shape (3, 3, 2)
Вероятно, следующее утверждение справедливо, учитывая, что 0.6 примерно вдвое превышает стандартное отклонение:
>>> list((x[0,0,:] - mean) < 0.6) [True, True] # random
© 2005–2021 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.20/reference/random/generated/numpy.random.Generator.multivariate_normal.html