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 оси указаны.
Смотрите так же:
var, median, mean, std


Примеры

>>> 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]))