Подтвердить что ты не робот

Вычисление ковариации с помощью 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

4b9b3361

Ответ 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)