Spec-Zone.ru › NumPy 1.20

numpy.random.multivariate_normal

random.multivariate_normal(mean, cov, size=None, check_valid='warn', tol=1e-8)

Генерация случайных выборок из многомерного нормального распределения.

Многомерное нормальное, многомерное или гауссово распределение — это обобщение одномерного нормального распределения на многомерный случай. Такое распределение определяется своим средним значением и ковариационной матрицей. Эти параметры аналогичны среднему значению (среднему или «центру») и дисперсии (стандартному отклонению или «ширине», возведённой в квадрат) одномерного нормального распределения.

Примечание

Новый код должен использовать метод multivariate_normal экземпляра default_rng(); см. Быстрый старт.

Параметры
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 перед проверкой.

Возвращает
outndarray

Сгенерированные выборки, имеющие форму size, если она была указана. В противном случае форма составляет (N,).

Другими словами, каждое значение out[i,j,...,:] представляет собой N-мерное значение, выбранное из распределения.

См. также

Generator.multivariate_normal

который следует использовать в новом коде.

Примечания

Среднее значение — это координата в N-мерном пространстве, представляющая местоположение, где выборки наиболее вероятны. Это аналогично пику кривой Гаусса для одномерного или унивариантного нормального распределения.

Ковариация показывает уровень совместного изменения двух переменных. Из многомерного нормального распределения мы получаем N-мерные выборки, X = [x_1, x_2, ... x_N]. Элемент ковариационной матрицы C_{ij} является ковариацией x_i и x_j. Элемент C_{ii} является дисперсией x_i (т. е. её «разбросом»).

Вместо указания всей ковариационной матрицы можно использовать популярные приближения:

  • Сферическая ковариация (cov — это кратная единичной матрице)
  • Диагональная ковариация (cov имеет неотрицательные элементы только на диагонали)

Это геометрическое свойство можно увидеть в двух измерениях, нарисовав точки сгенерированных данных:

>>> mean = [0, 0]
>>> cov = [[1, 0], [0, 100]]  # diagonal covariance

Диагональная ковариация означает, что точки ориентированы вдоль осей x или y:

>>> import matplotlib.pyplot as plt
>>> x, y = np.random.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]]
>>> x = np.random.multivariate_normal(mean, cov, (3, 3))
>>> x.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.multivariate_normal.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API