numpy .corrcoef () сомневается в возвращаемом значении - PullRequest
2 голосов
/ 02 мая 2020

Мне нужен коэффициент корреляции Пирсона между двумя матрицами X, Y. Если я запускаю код corr=numpy.corrcoef(X,Y), мой вывод - это матрица с коэффициентами корреляции. Однако мне нужно одно значение для представления корреляции между двумя матрицами.

Я только что видел на ответе этого Кеннимма, что для того, чтобы иметь одно значение, я должен написать numpy.corrcoef(X,Y)[1,0].

Это решение работает, но я не понимаю, что означают эти числа в квадратных скобках и почему, добавляя их, я имею в качестве результата одно единственное значение.

Я интерпретирую 1 и 0 как пределы коэффициента, но что происходит ко всем коэффициентам внутри матрицы? Какой тип операции вычисляется для них, чтобы получить одно значение? Если я изменю числа в квадратных скобках, например, [1,-1] ( корреляция, антикорреляция ), значение corr изменится, поэтому я запутался, какие цифры следует использовать в скобках.

1 Ответ

3 голосов
/ 02 мая 2020

numpy.corrcoef возвращает матрицу, содержащую коэффициент корреляции для каждой пары строк. Так, например, numpy.corrcoef(A,B) для A.shape=(3,3) и B.shape=(3,3) вернет матрицу (6,6), поскольку существует 36 комбинаций строк. Обратите внимание, что это матрица симметрии c, поскольку она возвращает обе корреляции для (например) A[1],B[1] (индекс [1,4]) и B[1],A[1] (индекс [4,1]). Когда у вас есть два одномерных массива, вы получаете матрицу (2,2): корреляцию первого массива с самим собой [0,0], корреляцию первого массива со вторым массивом [0,1], корреляцию второго массива с первый массив [1,0] и корреляция второго массива с самим собой [1,1].

import numpy as np
A = np.random.randint(low=0, high=99, size=(3,3))
B = np.random.randint(low=0, high=99, size=(3,3))
C = np.corrcoef(A,B)
print(C[1,4]==np.corrcoef(A[1],B[1])[0,1]) # True

Если вы хотите двумерную корреляцию (например, корреляцию между изображениями), сгладьте двумерные массивы, Таким образом, вы получаете одну строку для каждого массива. Тогда элемент [0,1] или [1,0] этой корреляционной матрицы будет таким, каким образом двумерные массивы полностью коррелируют друг с другом.

print(np.corrcoef(A.flatten(), B.flatten())[0,1])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...