我需要两个矩阵 X,Y 之间的皮尔逊相关系数。 如果我运行代码corr=numpy.corrcoef(X,Y)
我的输出是一个具有相关系数的矩阵。 但是,我需要单个值来表示两个矩阵之间的相关性。
我刚刚在这个 kennytm 的答案上看到,要有一个值,我应该写numpy.corrcoef(X,Y)[1,0]
.
这个解决方案有效,但我不明白方括号内的数字是什么意思,以及为什么将它们添加为一个值的结果。
我将 1 和 0 解释为系数的限制,但是矩阵内的所有系数会发生什么? 对它们计算什么类型的操作以获得单个值? 例如,如果我更改方括号内的数字[1,-1]
(相关性、反相关),则corr
的值会发生变化,所以我对应该在括号内使用哪些数字感到困惑。
numpy.corrcoef
返回一个矩阵,其中包含每对行的相关系数。例如,A.shape=(3,3)
和B.shape=(3,3)
的numpy.corrcoef(A,B)
将返回一个(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])