numpy.var
- numpy.var(a, axis=None, dtype=None, out=None, ddof=0, keepdims=<no value>, *, where=<no value>, mean=<no value>, correction=<no value>)[source]
-
Вычисление дисперсии по указанной оси.
Возвращает дисперсию элементов массива, которая является мерой разброса распределения. Дисперсия вычисляется для сплющенного массива по умолчанию, в противном случае по указанной оси.
- Параметры:
-
- aarray_like
-
Массив, содержащий числа, дисперсия которых требуется. Если
aне является массивом, выполняется попытка преобразования. - axisNone или int или кортеж из целых чисел, необязательно
-
Ось или оси, по которым вычисляется дисперсия. По умолчанию вычисляется дисперсия сплющенного массива.
Введено в версии 1.7.0.
Если это кортеж целых чисел, дисперсия вычисляется по нескольким осям вместо одной оси или всех осей, как раньше.
- dtypeтип данных, необязательно
-
Тип, используемый при вычислении дисперсии. Для массивов целочисленного типа значение по умолчанию —
float64; для массивов с плавающей точкой — такой же, как и тип массива. - outndarray, необязательно
-
Альтернативный массив вывода, в который следует поместить результат. Он должен иметь ту же форму, что и ожидаемый результат, но тип при необходимости преобразуется.
- ddof{int, float}, необязательно
-
«Delta Degrees of Freedom»: делитель, используемый в вычислении, равен
N - ddof, гдеN— количество элементов. По умолчаниюddofравно нулю. Подробности об использованииddofсм. в примечаниях. - keepdimsbool, необязательно
-
Если это значение True, оси, которые были уменьшены, остаются в результате в качестве измерений с размером один. С этим параметром результат будет корректно транслироваться относительно входного массива.
Если передано значение по умолчанию, то
keepdimsне будет передано методуvarподклассовndarray, однако любое отличное от значения по умолчанию будет. Если метод подкласса не реализуетkeepdims, будут подняты исключения. - wherearray_like булевых значений, необязательно
-
Элементы, которые нужно включить в дисперсию. Подробнее см. в
reduce.Введено в версии 1.20.0.
- meanarray-like, необязательно
-
Предоставьте среднее значение, чтобы избежать его повторного вычисления. Среднее значение должно иметь форму, как если бы оно было вычислено с помощью
keepdims=True. Ось для вычисления среднего значения должна быть такой же, как и используемая в вызове этой функции var.Введено в версии 1.26.0.
- correction{int, float}, необязательно
-
Совместимое с API Array имя параметра
ddof. Одновременно можно передать только один из них.Введено в версии 2.0.0.
- Возвращает:
-
- variancendarray, см. параметр 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полезны в разных контекстах. Значение по умолчанию NumPyddof=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может помочь решить эту проблему.Примеры
>>> 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) 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%
© 2005–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/reference/generated/numpy.var.html