scipy.stats.

directional_stats#

scipy.stats.directional_stats(образцы, *, ось=0, нормализовать=True)[источник]#

Вычисляет выборочную статистику для направленных данных.

Вычисляет направленное среднее (также называемое вектором среднего направления) и среднюю результирующую длину выборки векторов.

Направленное среднее — это мера "предпочтительного направления" векторных данных. Оно аналогично выборочному среднему, но предназначено для использования, когда длина данных не имеет значения (например, единичные векторы).

Средняя результирующая длина — это значение от 0 до 1, используемое для количественной оценки дисперсии направленных данных: чем меньше средняя результирующая длина, тем больше дисперсия. Несколько определений направленной дисперсии, включающих среднюю результирующую длину, приведены в [1] и [2].

Параметры:
образцыarray_like

Входной массив. Должен быть как минимум двумерным, и последняя ось входа должна соответствовать размерности векторного пространства. Когда вход точно двумерный, это означает, что каждая строка данных является векторным наблюдением.

осьint, по умолчанию: 0

Ось, вдоль которой вычисляется направленное среднее.

normalize: логический, по умолчанию: True

Если True, нормализовать входные данные, чтобы гарантировать, что каждое наблюдение является единичным вектором. Если наблюдения уже являются единичными векторами, рассмотрите установку этого значения в False, чтобы избежать ненужных вычислений.

Возвращает:
resDirectionalStats

Объект, содержащий атрибуты:

среднее направлениеndarray

Направленное среднее.

mean_resultant_lengthndarray

Средняя результирующая длина [1].

Смотрите также

circmean

круговое среднее; т.е. направленное среднее для 2D углы

circvar

круговая дисперсия; т.е. направленная дисперсия для 2D углы

Примечания

Это использует определение направленного среднего из [1]. Предполагая, что наблюдения являются единичными векторами, вычисление выполняется следующим образом.

mean = samples.mean(axis=0)
mean_resultant_length = np.linalg.norm(mean)
mean_direction = mean / mean_resultant_length

Это определение подходит для направленный данные (т.е. векторные данные, для которых величина каждого наблюдения не имеет значения), но не для осевой данные (т.е. векторные данные, для которых величина и знак каждого наблюдения не имеет значения).

Несколько определений направленной дисперсии, включающих среднюю результирующую длину R были предложены, включая 1 - R [1], 1 - R**2 [2], и 2 * (1 - R) [2]. Вместо выбора одного, эта функция возвращает R как атрибут mean_resultant_length чтобы пользователь мог вычислить предпочитаемую меру дисперсии.

Ссылки

[1] (1,2,3,4)

Мардиа, Джапп. (2000). Направленная статистика (стр. 163). Wiley.

Примеры

>>> import numpy as np
>>> from scipy.stats import directional_stats
>>> data = np.array([[3, 4],    # first observation, 2D vector space
...                  [6, -8]])  # second observation
>>> dirstats = directional_stats(data)
>>> dirstats.mean_direction
array([1., 0.])

В отличие от этого, обычное выборочное среднее векторов было бы подвержено влиянию величины каждого наблюдения. Более того, результат не был бы единичным вектором.

>>> data.mean(axis=0)
array([4.5, -2.])

Примерный случай использования для directional_stats состоит в нахождении осмысленный центр для набора наблюдений на сфере, например, географических местоположений.

>>> data = np.array([[0.8660254, 0.5, 0.],
...                  [0.8660254, -0.5, 0.]])
>>> dirstats = directional_stats(data)
>>> dirstats.mean_direction
array([1., 0., 0.])

Обычное выборочное среднее, с другой стороны, даёт результат, который не лежит на поверхности сферы.

>>> data.mean(axis=0)
array([0.8660254, 0., 0.])

Функция также возвращает среднюю результирующую длину, которую можно использовать для вычисления направленной дисперсии. Например, используя определение Var(z) = 1 - R из [2] где R является средней результирующей длиной, мы можем рассчитать направленную дисперсию векторов в приведённом выше примере как:

>>> 1 - dirstats.mean_resultant_length
0.13397459716167093