Как рассчитать одиночный коэффициент взаимной корреляции матриц A с другими матрицами B python? - PullRequest
0 голосов
/ 30 мая 2018

У меня есть три матрицы AB и C. Я хочу найти, какая матрица (B & C) имеет лучший коэффициент взаимной корреляции с матрицами A.

A=np.array([[1, 2, 4],[3, 4, 5],[1, 4, 5]])  
B=np.array([[1, 1, 1], [1, 2, 4],[1, 4, 5]])   
C=np.array([[1, 2, 4], [1, 1, 1],[1, 4, 5]]) 

scipy.correlate2d и numpy.corrcoefдают матрицу в качестве выхода.Мне просто нужно одно значение коэффициента корреляции, чтобы я мог найти матрицы, более похожие на A.
Спасибо за ваши ответы заранее.

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Согласно этому ответу , вы можете векторизовать входные матрицы и рассчитать коэффициент корреляции из векторных данных:

import numpy as np

A = np.array([[1, 2, 4], [3, 4, 5], [1, 4, 5]])
B = np.array([[1, 1, 1], [1, 2, 4], [1, 4, 5]])
C = np.array([[1, 2, 4], [1, 1, 1], [1, 4, 5]])
CC_AB = np.corrcoef(A.ravel(), B.ravel())
CC_AC = np.corrcoef(A.ravel(), C.ravel())
print('Correlation between A and B:', CC_AB[0, 1])
print('Correlation between A and C:', CC_AC[0, 1])

Как видите, вывод np.corrcoef() - симметричная матрица 2 x 2 с диагональю (автокорреляция).Интересующий вас коэффициент корреляции недиагональный.В вашем случае результаты таковы:

Correlation between A and B: 0.7576538541439333
Correlation between A and C: 0.5141222581690976
0 голосов
/ 30 мая 2018

вы ищете максимальное и argmax выходного значения:

corr=scipy.correlate2d(A,B)
maxCorr=corr.max()
indexmaxCorr=np.argmax(corr)

это связано с тем, что коррелят - это в основном свертка, и тогда у вас есть значение сходства для разных «сдвигов».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...