Вычисление ковариации с помощью Python и Numpy
Я пытаюсь выяснить, как вычислить ковариацию с помощью функции Python Numpy cov. Когда я передаю ему два одномерных массива, я возвращаю 2x2 матрицу результатов. Я не знаю, что с этим делать. Я не очень хорош в статистике, но я считаю, что ковариация в такой ситуации должна быть единственным числом. Это то, что я ищу. Я написал свой собственный:
def cov(a, b):
if len(a) != len(b):
return
a_mean = np.mean(a)
b_mean = np.mean(b)
sum = 0
for i in range(0, len(a)):
sum += ((a[i] - a_mean) * (b[i] - b_mean))
return sum/(len(a)-1)
Это работает, но я считаю, что версия Numpy намного эффективнее, если бы я мог понять, как ее использовать.
Кто-нибудь знает, как заставить функцию Numy cov выполнять, как тот, который я написал?
Спасибо,
Dave
Ответы
Ответ 1
Когда a
и b
являются одномерными последовательностями, numpy.cov(a,b)[0][1]
эквивалентен вашему cov(a,b)
.
В массиве 2x2, возвращаемом np.cov(a,b)
, есть элементы, равные
cov(a,a) cov(a,b)
cov(a,b) cov(b,b)
(где, опять же, cov
- это функция, которую вы определили выше.)
Ответ 2
Благодаря unutbu для объяснения. По умолчанию numpy.cov вычисляет выборочную ковариацию. Чтобы получить ковариацию популяции, вы можете указать нормализацию по общим N выборкам следующим образом:
Covariance = numpy.cov(a, b, bias=True)[0][1]
print(Covariance)
или вот так:
Covariance = numpy.cov(a, b, ddof=0)[0][1]
print(Covariance)