numpy.ma.MaskedArray.var#
метод
-
ma.MaskedArray.var(axis=None, dtype=None, out=None, ddof=0, keepdims=
значение> , mean=<нет значение>)[источник]# Вычислить дисперсию вдоль указанной оси.
Возвращает дисперсию элементов массива, меру разброса распределения. Дисперсия вычисляется для сведенного массива по умолчанию, в противном случае по указанной оси.
- Параметры:
- aarray_like
Массив, содержащий числа, для которых требуется дисперсия. Если a не является массивом, выполняется попытка преобразования.
- осьNone или int или кортеж ints, опционально
Ось или оси, вдоль которых вычисляется дисперсия. По умолчанию вычисляется дисперсия сглаженного массива. Если это кортеж целых чисел, дисперсия выполняется по нескольким осям вместо одной оси или всех осей, как раньше.
- dtypeтип данных, опционально
Тип для использования при вычислении дисперсии. Для массивов целочисленного типа по умолчанию используется
float64; для массивов типов с плавающей точкой это то же самое, что и тип массива.- выходndarray, необязательно
Альтернативный выходной массив для размещения результата. Он должен иметь ту же форму, что и ожидаемый вывод, но тип приводится, если необходимо.
- ddof{int, float}, опционально
“Дельта степеней свободы”: делитель, используемый в вычислении, это
N - ddof, гдеNпредставляет количество элементов. По умолчанию ddof равно нулю. См. примечания для подробностей об использовании ddof.- keepdimsbool, необязательно
Если установлено значение True, оси, которые были сокращены, остаются в результате как размерности с размером один. С этой опцией результат будет корректно транслироваться относительно входного массива.
Если передано значение по умолчанию, то keepdims не будет передано в
varметод подклассовndarray, однако любое нестандартное значение будет. Если метод подкласса не реализует keepdims любые исключения будут вызваны.- гдеarray_like из bool, необязательный
Элементы для включения в дисперсию. См.
reduceдля подробностей.Новое в версии 1.20.0.
- meanподобный массиву, опционально
Предоставьте среднее значение, чтобы предотвратить его пересчёт. Среднее должно иметь форму, как если бы оно было вычислено с помощью
keepdims=True. Ось для вычисления среднего должна быть той же, что использовалась при вызове этой функции var.Новое в версии 2.0.0.
- коррекция{int, float}, опционально
Совместимое с Array API имя для
ddofпараметр. Только один из них может быть предоставлен одновременно.Новое в версии 2.0.0.
- Возвращает:
- дисперсияndarray, см. параметр dtype выше
Если
out=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`
Различные значения аргумента ddof полезны в разных контекстах. Стандартный тип NumPy
ddof=0соответствует выражению:\[\frac{\sum_i{|a_i - \bar{a}|^2 }}{N}\]которую иногда называют «дисперсией генеральной совокупности» в области статистики, потому что она применяет определение дисперсии к a как если бы a были полной совокупностью возможных наблюдений.
Многие другие библиотеки определяют дисперсию массива по-другому, например:
\[\frac{\sum_i{|a_i - \bar{a}|^2}}{N - 1}\]В статистике результирующая величина иногда называется «выборочной дисперсией», потому что если a является случайной выборкой из большей популяции, это вычисление дает несмещенную оценку дисперсии популяции. Использование \(N-1\) в знаменателе часто называется «поправкой Бесселя», потому что она корректирует смещение (в сторону меньших значений) в оценке дисперсии, введенное, когда выборочное среднее a используется вместо истинного среднего значения популяции. Для этой величины используйте
ddof=1.Обратите внимание, что для комплексных чисел абсолютное значение берется до возведения в квадрат, так что результат всегда вещественный и неотрицательный.
Для входных данных с плавающей точкой дисперсия вычисляется с той же точностью, что и входные данные. В зависимости от входных данных это может привести к неточным результатам, особенно для
float32(см. пример ниже). Указание аккумулятора с более высокой точностью с помощьюdtypeключевое слово может смягчить эту проблему.Примеры
>>> import numpy as np >>> a = np.array([[1, 2], [3, 4]]) >>> np.var(a) 1.25 >>> np.var(a, axis=0) array([1., 1.]) >>> np.var(a, axis=1) array([0.25, 0.25])
В одинарной точности var() может быть неточным:
>>> a = np.zeros((2, 512*512), dtype=np.float32) >>> a[0, :] = 1.0 >>> a[1, :] = 0.1 >>> np.var(a) np.float32(0.20250003)
Вычисление дисперсии в float64 является более точным:
>>> np.var(a, dtype=np.float64) 0.20249999932944759 # may vary >>> ((1-0.55)**2 + (0.1-0.55)**2)/2 0.2025
Указание аргумента where:
>>> a = np.array([[14, 8, 11, 10], [7, 9, 10, 11], [10, 15, 5, 10]]) >>> np.var(a) 6.833333333333333 # may vary >>> np.var(a, where=[[True], [True], [False]]) 4.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("var = np.var(a, axis=1, mean=mean)", globals=g, number=n) >>> t2 = timeit("var = np.var(a, axis=1)", globals=g, number=n) >>> print(f'Percentage execution time saved {100*(t2-t1)/t2:.0f}%') Percentage execution time saved 32%