Вы, кажется, находитесь после (внутреннего) точечного произведения между mu
и w
.Чтобы реализовать это самостоятельно, просто обратитесь к ответу @tobias_k.Однако в стандартном пакете для числовых массивов в Python, т.е. NumPy, функция dot()
или оператор @
(в Python> = 3.5) будут выполнять то, что вы запрашиваете, то есть (внутреннее) скалярное произведение.
import numpy as np
# define some dummy objects
mu = list(range(0, 10))
w = list(range(10, 20))
muaverage = sum(x * y for x, y in zip(mu, w))
# muaverage == 735
muaverage = np.dot(mu, w)
# muaverage == 735
# operands of `@` should be `numpy.array()`
mu = np.array(mu)
w = np.array(w)
muaverage = mu @ w
# muaverage == 735
Но ваше наименование предполагает, что, возможно, вы находитесь после средневзвешенного значения, для которого вы бы использовали average()
, который принимает параметр weight
, например,
import numpy as np
# define some dummy objects
mu = list(range(0, 10))
w = list(range(10, 20))
muaverage = np.average(mu, weights=w)
# muaverage == 5.068965517241379
muaverage = np.dot(mu, w) / np.sum(w)
# muaverage == 5.068965517241379
(ИЗМЕНЕНО для лучшего включения np.dot()
).