为什么是np.corcoef不能像预期的那样处理两个2维向量?



我试图使用np.corrcoef计算两个向量在二维中的Pearson相关系数。当向量的维数不同于两个时,它们工作得很好,例如:

import numpy as np
x = np.random.uniform(-10, 10, 3)
y = np.random.uniform(-10, 10, 3)
print(x, y)
print(np.corrcoef(x,y))

输出:

[-6.59840638 -1.81100446  5.6158669 ] [ 6.7200348  -7.0373677  -2.11395157]
[[ 1.         -0.53299763]
[-0.53299763  1.        ]]

但是,当维度恰好是两个时,,只有1-1值的相关性是错误的:

import numpy as np
x = np.random.uniform(-10, 10, 2)
y = np.random.uniform(-10, 10, 2)
print(x, y)
print(np.corrcoef(x,y))

输出1:

[-2.61268708  8.32602293] [6.42020314 3.43806504]
[[ 1. -1.]
[-1.  1.]]

输出2:

[ 5.04249697 -3.6599369 ] [6.12936665 3.15827974]
[[1. 1.]
[1. 1.]]

输出3:

[7.33503682 7.7145613 ] [-9.54304108  7.43840944]
[[1. 1.]
[1. 1.]]

问题:发生了什么?如何解决?

有几个误解会导致你的困惑:

我将使用行主要顺序为numpy " x的每一行表示一个变量,每一列表示所有这些变量的单个观察值。">

  • Pearson相关系数描述了两个变量之间的线性关系。如果每个变量只有一个值,则可以在这两个变量之间创建线性关系。通过规范化,您将始终得到1或-1。

  • 通常在随机向量X=(X1,....,Xn)的分量之间计算协方差或相关矩阵。T。当你说你想要两个向量之间的相关性时,你不清楚你是否想要X和Y之间的交叉相关性,在这种情况下你需要np. correlation。