circmean#
- scipy.stats.circmean(образцы, высокий=6.283185307179586, низкий=0, ось=None, nan_policy='propagate', *, keepdims=False)[источник]#
Вычисление кругового среднего выборки угловых наблюдений.
Учитывая \(n\) угловые наблюдения \(x_1, \cdots, x_n\) измеряется в радианах, их круговое среднее определяется как ([1], Ур. 2.2.4)
\[\mathrm{Arg} \left( \frac{1}{n} \sum_{k=1}^n e^{i x_k} \right)\]где \(i\) является мнимой единицей, а \(\mathop{\mathrm{Arg}} z\) даёт главное значение аргумента комплексного числа \(z\), ограниченный диапазоном \([0,2\pi]\) по умолчанию. \(z\) в вышеприведенном выражении известен как средний результирующий вектор.
- Параметры:
- образцыarray_like
Входной массив наблюдений углов. Значение полного угла равно
(high - low).- высокийfloat, опционально
Верхняя граница главного значения угла. По умолчанию
2*pi.- низкийfloat, опционально
Нижняя граница главного значения угла. По умолчанию
0.- осьint или None, по умолчанию: None
Если это целое число, ось входных данных, по которой вычисляется статистика. Статистика каждого среза по оси (например, строки) входных данных появится в соответствующем элементе вывода. Если
None, вход будет сведён в одномерный массив перед вычислением статистики.- nan_policy{‘propagate’, ‘omit’, ‘raise’}
Определяет, как обрабатывать входные значения NaN.
propagate: если NaN присутствует в срезе оси (например, строке), вдоль которой вычисляется статистика, соответствующая запись вывода будет NaN.omit: NaN будут пропущены при выполнении расчета. Если в срезе оси, вдоль которого вычисляется статистика, остается недостаточно данных, соответствующая запись вывода будет NaN.raise: если присутствует NaN, тоValueErrorбудет вызвано исключение.
- keepdimsbool, по умолчанию: False
Если установлено значение True, оси, которые были сокращены, остаются в результате как размерности с размером один. С этой опцией результат будет корректно транслироваться относительно входного массива.
- Возвращает:
- circmeanfloat
Циклическое среднее, ограниченное диапазоном
[low, high].Если средний результирующий вектор равен нулю, входозависимое, определяемое реализацией число между
[low, high]возвращается. Если входной массив пуст,np.nanвозвращается.
Примечания
Начиная с SciPy 1.9,
np.matrixвходные данные (не рекомендуется для нового кода) преобразуются вnp.ndarrayперед выполнением вычисления. В этом случае результатом будет скаляр илиnp.ndarrayподходящей формы вместо 2Dnp.matrix. Аналогично, хотя маскированные элементы маскированных массивов игнорируются, результатом будет скаляр илиnp.ndarrayвместо маскированного массива сmask=False.Ссылки
[1]Мардия, К. В. и Джапп, П. Е. Направленная статистика. John Wiley & Sons, 1999.
Примеры
Для удобства чтения все углы выводятся в градусах.
>>> import numpy as np >>> from scipy.stats import circmean >>> import matplotlib.pyplot as plt >>> angles = np.deg2rad(np.array([20, 30, 330])) >>> circmean = circmean(angles) >>> np.rad2deg(circmean) 7.294976657784009
>>> mean = angles.mean() >>> np.rad2deg(mean) 126.66666666666666
Построить график и сравнить круговое среднее с арифметическим средним.
>>> plt.plot(np.cos(np.linspace(0, 2*np.pi, 500)), ... np.sin(np.linspace(0, 2*np.pi, 500)), ... c='k') >>> plt.scatter(np.cos(angles), np.sin(angles), c='k') >>> plt.scatter(np.cos(circmean), np.sin(circmean), c='b', ... label='circmean') >>> plt.scatter(np.cos(mean), np.sin(mean), c='r', label='mean') >>> plt.legend() >>> plt.axis('equal') >>> plt.show()