numpy.std#

numpy.std(a, axis=None, dtype=None, out=None, ddof=0, keepdims= значение>, *, where= значение>, mean=<нет значение>, correction= значение>)[источник]#

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

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

Параметры:
aarray_like

Вычислить стандартное отклонение этих значений.

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

Ось или оси, по которым вычисляется стандартное отклонение. По умолчанию вычисляется стандартное отклонение сведенного массива. Если это кортеж целых чисел, стандартное отклонение выполняется по нескольким осям, а не по одной оси или всем осям, как раньше.

dtypedtype, опционально

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

выходndarray, необязательно

Альтернативный выходной массив для размещения результата. Он должен иметь ту же форму, что и ожидаемый вывод, но тип (вычисленных значений) будет приведен при необходимости. См. Определение типа вывода для получения дополнительной информации.

ddof{int, float}, опционально

Означает Delta Degrees of Freedom. Делитель, используемый в вычислениях, равен N - ddof, где N представляет количество элементов. По умолчанию ddof равен нулю. Подробности об использовании см. в примечаниях. ddof.

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

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

Если передано значение по умолчанию, то keepdims не будет передано в std метод подклассов ndarray, однако любое нестандартное значение будет. Если метод подкласса не реализует keepdims любые исключения будут вызваны.

гдеarray_like из bool, необязательный

Элементы для включения в стандартное отклонение. См. reduce подробности.

Новое в версии 1.20.0.

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

Предоставьте среднее значение, чтобы предотвратить его пересчёт. Среднее должно иметь форму, как если бы оно было вычислено с помощью keepdims=True. Ось для расчета среднего должна быть той же, что использовалась в вызове этой функции std.

Новое в версии 2.0.0.

коррекция{int, float}, опционально

Совместимое с Array API имя для ddof параметр. Только один из них может быть предоставлен одновременно.

Новое в версии 2.0.0.

Возвращает:
standard_deviationndarray, см. параметр dtype выше.

Если выход равно None, возвращает новый массив, содержащий стандартное отклонение, в противном случае возвращает ссылку на выходной массив.

Примечания

Существует несколько распространенных вариантов расчета стандартного отклонения массива. Предполагая входные данные a является одномерным массивом NumPy и mean предоставляется либо как аргумент, либо вычисляется как a.mean(), NumPy вычисляет стандартное отклонение массива как:

N = len(a)
d2 = abs(a - mean)**2  # abs is for complex `a`
var = d2.sum() / (N - ddof)  # note use of `ddof`
std = var**0.5

Различные значения аргумента ddof полезны в разных контекстах. Стандартный тип NumPy ddof=0 соответствует выражению:

\[\sqrt{\frac{\sum_i{|a_i - \bar{a}|^2 }}{N}}\]

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

Многие другие библиотеки определяют стандартное отклонение массива по-другому, например:

\[\sqrt{\frac{\sum_i{|a_i - \bar{a}|^2 }}{N - 1}}\]

В статистике полученная величина иногда называется "выборочным стандартным отклонением", потому что если a является случайной выборкой из большей популяции, этот расчёт предоставляет квадратный корень из несмещённой оценки дисперсии популяции. Использование \(N-1\) в знаменателе часто называют "поправкой Бесселя", потому что она корректирует смещение (в сторону меньших значений) в оценке дисперсии, введенное, когда выборочное среднее a используется вместо истинного среднего значения популяции. Полученная оценка стандартного отклонения всё ещё смещена, но меньше, чем была бы без поправки. Для этой величины используйте ddof=1.

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

Для входных данных с плавающей точкой стандартное отклонение вычисляется с той же точностью, что и входные данные. В зависимости от входных данных это может привести к неточным результатам, особенно для float32 (см. пример ниже). Указание аккумулятора с более высокой точностью с помощью dtype ключевое слово может устранить эту проблему.

Примеры

>>> import numpy as np
>>> a = np.array([[1, 2], [3, 4]])
>>> np.std(a)
1.1180339887498949 # may vary
>>> np.std(a, axis=0)
array([1.,  1.])
>>> np.std(a, axis=1)
array([0.5,  0.5])

В одинарной точности std() может быть неточным:

>>> a = np.zeros((2, 512*512), dtype=np.float32)
>>> a[0, :] = 1.0
>>> a[1, :] = 0.1
>>> np.std(a)
np.float32(0.45000005)

Вычисление стандартного отклонения в float64 более точно:

>>> np.std(a, dtype=np.float64)
0.44999999925494177 # may vary

Указание аргумента where:

>>> a = np.array([[14, 8, 11, 10], [7, 9, 10, 11], [10, 15, 5, 10]])
>>> np.std(a)
2.614064523559687 # may vary
>>> np.std(a, where=[[True], [True], [False]])
2.0

Использование ключевого слова mean для экономии времени вычислений:

>>> import numpy as np
>>> from timeit import timeit
>>> a = np.array([[14, 8, 11, 10], [7, 9, 10, 11], [10, 15, 5, 10]])
>>> mean = np.mean(a, axis=1, keepdims=True)
>>>
>>> g = globals()
>>> n = 10000
>>> t1 = timeit("std = np.std(a, axis=1, mean=mean)", globals=g, number=n)
>>> t2 = timeit("std = np.std(a, axis=1)", globals=g, number=n)
>>> print(f'Percentage execution time saved {100*(t2-t1)/t2:.0f}%')

Percentage execution time saved 30%