Spec-Zone.ru › NumPy 2.0

numpy.ma.var

ma.var(self, axis=None, dtype=None, out=None, ddof=0, keepdims=<no value>, mean=<no value>)=<numpy.ma.core._frommethod object>

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

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

Параметры:
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 из bool, необязательно

Элементы, которые нужно включить в дисперсию. Подробности см. в reduce.

Введено в версии 1.20.0.

meanмассив, необязательно

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

Введено в версии 1.26.0.

correction{int, float}, необязательно

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

Введено в версии 2.0.0.

Возвращаемые значения:
variancendarray, см. параметр dtype выше

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

См. также

std, mean, nanmean, nanstd, nanvar
Определение типа вывода

Примечания

Существует несколько распространенных вариантов вычисления дисперсии массива. Предполагая, что входной 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 может устранить эту проблему.

Примеры

>>> 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.ma.var.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API