numpy.average
numpy.average(a, axis=None, weights=None, returned=False)
Функция average() вычисляет среднее арифметическое взвешенное значений элементов массива.
Средневзвешенное чисел \( a_{1},\ldots ,a_{n} \), с весами \( w_{1},\ldots ,w_{n} \) записывается как:
$${\bar {a}}={\frac {\sum \limits _{{i=1}}^{n}w_{i}\cdot a_{i}}{\sum \limits _{{i=1}}^{n}w_{i}}}$$
Сумма весов в знаменателе не может быть равна 0, но некоторые веса могут быть равны 0. Если сумма весов все же оказалась равна 0, то возникает ошибка ZeroDivisionError.
Если веса выражают часть от целого (например в процентах) и в сумме дают 1, то формула примет вид:
$${\bar {a}}=\sum \limits _{{i=1}}^{n}w_{i}\cdot a_{i}$$
В случае одинаковых весов, мы получим обычное среднее арифметическое, которое можно вычислить функцией numpy.mean()
.
-
- a - массив NumPy или подобный массиву объект.
- Входные данные.
- axis - число, кортеж целых чисел или None (необязательный параметр).
- Позволяет задать ось или несколько осей вдоль которых вычисляются медианы. По умолчанию установлено значение None, что соответствует вычислению медианы всех элементов массива, так словно он сжат до одной оси.
- weights - массив NumPy или подобный массиву объект (необязательный параметр).
-
Массив весов каждого элемента в
a
. Данный массив может быть одномерным, но в этом случае, его длинна должна быть равна длине указанной оси исходного массива, или, он может иметь туже форму, что и входной массив. Еслиweights = None
то все веса предполагаются равными 1. В случае несовпадения размеровweights = None
иa
или невозможности выполнить транслирование возникает ошибка TypeError. - returned - True или False (необязательный параметр).
- Если установлено значение True, то возвращается кортеж в котором первый элемент - средневзвешенное, второй - сумма весов. По умолчанию установлено значение False.
-
- результат - массив NumPy или число
- Средневзвешенное значений элементов массива в виде числа для одномерного массива, или многомерного если параметр
axis = None
. Для многомерного массива возвращает массив NumPy если в параметреaxis
оси указаны.
Примеры
>>> import numpy as np
>>>
>>> a = [1, 2, 3, 4, 5]
>>> w = [10, 7, 4, 2, 1]
>>>
>>> np.average(a, weights = w)
2.0416666666666665
>>>
>>>
>>> # Без параметра weights получим
... # простое среднее арифметическое:
... np.average(a)
3.0
Если у массива больше одной оси (больше одного измерения), то мы можем найти средневзвешенное вдоль каждой из них:
>>> a = np.arange(18).reshape(3, 6)
>>> a
array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17]])
>>>
>>> w0 = [0.7, 0.2, 0.1]
>>>
>>> # Средневзвешенное каждого столбца:
... np.average(a, weights = w0, axis = 0)
array([2.4, 3.4, 4.4, 5.4, 6.4, 7.4])
>>>
>>> w1 = [0.3, 0.2, 0.15, 0.1, 0.08, 0.02]
>>>
>>> # Средневзвешенное каждой строки:
... np.average(a, weights = w1, axis = 1)
array([ 1.43529412, 7.43529412, 13.43529412])
>>>
>>>
>>> # В этом легко убедиться:
... np.sum(a[0]*w1)/np.sum(w1)
1.4352941176470588
Параметр returned
позволяет получить не только средневзвешенное, но и сумму весов:
>>> np.average(a, weights = w1, axis = 1, returned = True)
(array([ 1.43529412, 7.43529412, 13.43529412]), array([0.85, 0.85, 0.85]))