scipy.stats.

gstd#

scipy.stats.gstd(a, ось=0, ddof=1, *, keepdims=False, nan_policy='propagate')[источник]#

Вычислить геометрическое стандартное отклонение массива.

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

Определяется как экспонента стандартного отклонения натуральных логарифмов наблюдений.

Параметры:
aarray_like

Массив, содержащий конечные, строго положительные, вещественные числа.

осьint, кортеж или None, опционально

Ось, вдоль которой выполняется операция. По умолчанию 0. Если None, вычисляется по всему массиву a.

ddofint, необязательный

Поправка на степени свободы при расчёте геометрического стандартного отклонения. По умолчанию — 1.

keepdimsлогический, необязательный

Если это установлено в True, оси, которые сокращаются, остаются в результате как измерения с длиной один. С этой опцией результат будет корректно транслироваться на входной массив.

nan_policy{‘propagate’, ‘omit’, ‘raise’}, по умолчанию: ‘propagate’

Определяет, как обрабатывать входные значения NaN.

  • propagate: если в срезе оси (например, строке), по которой вычисляется статистика, присутствует NaN, соответствующая запись в выходных данных будет NaN.

  • omit: NaN будут пропущены при выполнении расчета. Если в срезе оси, вдоль которого вычисляется статистика, остается недостаточно данных, соответствующая запись вывода будет NaN.

  • raise: если присутствует NaN, то ValueError будет вызвано исключение.

Возвращает:
gstdndarray или float

Массив геометрического стандартного отклонения. Если ось равно None или a является одномерным массивом, возвращается float.

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

gmean

Среднее геометрическое

numpy.std

Стандартное отклонение

gzscore

Геометрический стандартный балл

Примечания

Математически, выборочное геометрическое стандартное отклонение \(s_G\) может быть определена через натуральные логарифмы наблюдений \(y_i = \log(x_i)\):

\[s_G = \exp(s), \quad s = \sqrt{\frac{1}{n - d} \sum_{i=1}^n (y_i - \bar y)^2}\]

где \(n\) это количество наблюдений, \(d\) является поправкой ddof к степеням свободы, и \(\bar y\) обозначает среднее натуральных логарифмов наблюдений. Обратите внимание, что по умолчанию ddof=1 отличается от значения по умолчанию, используемого аналогичными функциями, такими как numpy.std и numpy.var.

Когда наблюдение бесконечно, геометрическое стандартное отклонение равно NaN (не определено). Неположительные наблюдения также будут давать NaN на выходе, потому что естественный логарифм (в отличие от комплексный логарифм) определён и конечен только для положительных вещественных чисел. Геометрическое стандартное отклонение иногда путают с экспонентой стандартного отклонения, exp(std(a)). Вместо этого, геометрическое стандартное отклонение exp(std(log(a))).

gstd имеет экспериментальную поддержку совместимых с Python Array API Standard бэкендов в дополнение к NumPy. Пожалуйста, рассмотрите тестирование этих функций, установив переменную окружения SCIPY_ARRAY_API=1 и предоставление массивов CuPy, PyTorch, JAX или Dask в качестве аргументов массива. Поддерживаются следующие комбинации бэкенда и устройства (или других возможностей).

Библиотека

CPU

GPU

NumPy

н/д

CuPy

н/д

PyTorch

JAX

Dask

н/д

См. Поддержка стандарта array API для получения дополнительной информации.

Ссылки

[1]

“Геометрическое стандартное отклонение”, Википедия, https://en.wikipedia.org/wiki/Geometric_standard_deviation.

[2]

Кирквуд, Т. Б., «Геометрические средние и меры дисперсии», Biometrics, том 35, стр. 908-909, 1979

Примеры

Найти геометрическое стандартное отклонение логнормально распределенной выборки. Заметим, что стандартное отклонение распределения равно единице; в логарифмическом масштабе это приблизительно равно exp(1).

>>> import numpy as np
>>> from scipy.stats import gstd
>>> rng = np.random.default_rng()
>>> sample = rng.lognormal(mean=0, sigma=1, size=1000)
>>> gstd(sample)
2.810010162475324

Вычислить геометрическое стандартное отклонение многомерного массива и заданной оси.

>>> a = np.arange(1, 25).reshape(2, 3, 4)
>>> gstd(a, axis=None)
2.2944076136018947
>>> gstd(a, axis=2)
array([[1.82424757, 1.22436866, 1.13183117],
       [1.09348306, 1.07244798, 1.05914985]])
>>> gstd(a, axis=(1,2))
array([2.12939215, 1.22120169])