numpy.random.Generator.multivariate_normal
method
-
Generator.multivariate_normal(mean, cov, size=None, check_valid='warn', tol=1e-8) -
Генерация случайных выборок из многомерного нормального распределения.
Многомерное нормальное, или гауссово, распределение — это обобщение одномерного нормального распределения на многомерный случай. Такое распределение задаётся своим средним и ковариационной матрицей. Эти параметры аналогичны среднему (среднему значению или «центру») и дисперсии (стандартному отклонению или «ширине» в квадрате) одномерного нормального распределения.
- Параметры
-
-
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,» 3-е изд., Нью-Йорк: McGraw-Hill, 1991.
-
2 -
Duda, R. O., Hart, P. E., и Stork, D. G., «Pattern Classification,» 2-е изд., Нью-Йорк: 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)
Можно использовать другой метод, отличный от стандартного: >>> 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–2020 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.19/reference/random/generated/numpy.random.Generator.multivariate_normal.html