numpy.random.Generator.multivariate_normal
метод
-
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., and 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)
Можно использовать другой метод, отличный от метода по умолчанию, для факторизации 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–2020 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.18/reference/random/generated/numpy.random.Generator.multivariate_normal.html