如何计算矩阵A与其他矩阵的单个互相关系数B python?

时间:2018-05-30 06:42:48

标签: python python-3.x python-2.7 numpy scipy

我有三个矩阵A B和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正在给出matrice作为输出。我只需要单个相关系数值,这样我就可以找到更相似的矩阵 提前感谢您的回答。

2 个答案:

答案 0 :(得分:2)

根据this answer,您可以对输入矩阵进行矢量化,并根据矢量数据计算相关系数:

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

答案 1 :(得分:1)

您正在寻找输出的max和argmax:

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

这是因为相关基本上是一个卷积,然后你有不同的相似值"移动"。