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