Spec-Zone.ru › NumPy 2.0

numpy.random.multivariate_normal

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

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

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

Примечание

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

Параметры:
meanОдномерный массив_like длины N

Среднее значение N-мерного распределения.

covДвумерный массив_like размера (N, N)

Ковариационная матрица распределения. Она должна быть симметричной и положительно полуопределённой для корректной выборки.

sizeЦелое число или кортеж целых чисел, необязательно

При заданной форме, например, (m,n,k), генерируются m*n*k выборок и упаковываются в m-строчный n-столбцовый k массив. Поскольку каждая выборка N-мерная, форма выходного массива (m,n,k,N). Если форма не указана, возвращается одна (N-мерная) выборка.

check_valid{‘warn’, ‘raise’, ‘ignore’}, необязательно

Поведение при не положительной полуопределённости ковариационной матрицы.

tolfloat, необязательно

Погрешность при проверке сингулярных значений в ковариационной матрице. cov приводится к типу double перед проверкой.

Возвращаемое значение:
outndarray

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

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

См. также

random.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., “Вероятность, случайные величины и случайные процессы,” 3-е изд., Нью-Йорк: McGraw-Hill, 1991.

[2]

Duda, R. O., Hart, P. E., and Stork, D. G., “Распознавание образов,” 2-е изд., Нью-Йорк: Wiley, 2001.

Примеры

>>> mean = (1, 2)
>>> cov = [[1, 0], [0, 1]]
>>> x = np.random.multivariate_normal(mean, cov, (3, 3))
>>> x.shape
(3, 3, 2)

Здесь мы генерируем 800 выборок из двумерного нормального распределения со средним значением [0, 0] и ковариационной матрицей [[6, -3], [-3, 3.5]]. Ожидаемые дисперсии первого и второго компонентов выборки составляют 6 и 3.5 соответственно, а ожидаемый коэффициент корреляции равен -3/sqrt(6*3.5) ≈ -0.65465.

>>> cov = np.array([[6, -3], [-3, 3.5]])
>>> pts = np.random.multivariate_normal([0, 0], cov, size=800)

Проверим, что среднее значение, ковариация и коэффициент корреляции выборки близки к ожидаемым значениям:

>>> pts.mean(axis=0)
array([ 0.0326911 , -0.01280782])  # may vary
>>> np.cov(pts.T)
array([[ 5.96202397, -2.85602287],
       [-2.85602287,  3.47613949]])  # may vary
>>> np.corrcoef(pts.T)[0, 1]
-0.6273591314603949  # may vary

Мы можем визуализировать эти данные с помощью диаграммы рассеяния. Ориентация облака точек иллюстрирует отрицательную корреляцию компонентов этой выборки.

>>> import matplotlib.pyplot as plt
>>> plt.plot(pts[:, 0], pts[:, 1], '.', alpha=0.5)
>>> plt.axis('equal')
>>> plt.grid()
>>> plt.show()
../../../_images/numpy-random-multivariate_normal-1.png

© 2005–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/reference/random/generated/numpy.random.multivariate_normal.html

Spec-Zone.ru

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