numpy.corrcoef() сомневается в возвращаемом значении

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

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

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

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


person onehalf    schedule 02.05.2020    source источник
comment
[1,0] — это именно то, как работает индексация в Python. Когда вы выполняете corrcoef(X,Y), на выходе получается массив, размер которого определяется размером ваших входных массивов. Для доступа к определенному элементу такого массива используются квадратные скобки. В более общем смысле [i,j] относится к элементу в i-й строке и j-м столбце. -1 используется для индексации последнего элемента по определенной оси.   -  person Lith    schedule 02.05.2020


Ответы (1)


numpy.corrcoef возвращает матрицу, содержащую коэффициент корреляции для каждой пары строк. Так, например, numpy.corrcoef(A,B) для A.shape=(3,3) и B.shape=(3,3) вернет матрицу (6,6), поскольку существует 36 комбинаций строк. Обратите внимание, что это симметричная матрица, поскольку она возвращает обе корреляции для (например) 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])
person b-fg    schedule 02.05.2020