我想计算矩阵 A 的每个列向量与矩阵 B的每个列向量之间的相关性。
考虑:
vectorsize = 777
A = np.random.rand(vectorsize, 64)
B = np.random.rand(vectorsize, 36)
corr = np.corrcoef(A, B, rowvar=False)
在这种情况下,np.corrcoef
的输出将是100x100矩阵。这是什么意思?
直观地说,我希望获得64x36矩阵。
答案 0 :(得分:4)
如果方法corrcoef得到两个数组x和y,它会堆叠它们(如果rowVar为True则垂直,如果rowVar为False,则为水平)。 在source:
if y is not None:
y = array(y, copy=False, ndmin=2, dtype=dtype)
if not rowvar and y.shape[0] != 1:
y = y.T
X = np.vstack((X, y))
在统计学上,它认为A有64个变量(在列中,因为rowVar为假),B有36个。堆叠它们会给你100个变量,因此100乘100相关矩阵。
相关矩阵始终是对称的(并且是半正定的)。如果你只想要x和y变量之间的相关性,它们就是一个大小为64乘36的非对角线块:用切片提取它。这是输出的结构:
corr(x, x), size 64 by 64 | corr(x, y), size 64 by 36
---------------------------+---------------------------
corr(y, x), size 36 by 64 | corr(y, y), size 36 by 36
答案 1 :(得分:2)
作为rowvar=False
,它计算列之间的相关性。因此,它计算A
的每列与其自身以及B
的每一列之间的Pearson相关系数。它与连接两个矩阵并计算其列之间的相关性相同,如下图:
C = np.hstack([A, B]) # C.shape[0] == A.shape[0] == B.shape[0] and C.shape[1] = A.shape[1] + B.shape[1]
corr_C = np.corrcoef(C, rowvar=False)
np.allclose(corr_C, corr) # Returns True