让我们假设矩阵X和Y的大小分别为2x3和2x2。R中的函数"cor"返回一个3x2矩阵,而Python中的函数numpy.corrcove返回一个5x5矩阵。以下示例:
R:
X<-matrix(c(0.2,0.5,0.1,0.7,0.5,0.3), nrow=2, ncol=3)
Y<-matrix(c(0.2,0.3,0.6,0.7), nrow=2)
cor(X,Y)
[,1] [,2]
[1,] 1 1
[2,] 1 1
[3,] -1 -1
Python:
X = np.array([[0.2,0.5], [0.1, 0.7], [0.5,0.3]], ndmin=2).T
Y = np.array([[0.2,0.3],[0.6,0.7]], ndmin=2).T
corr = np.corrcoef(X, Y, rowvar=False)
array([[ 1., 1., -1., 1., 1.],
[ 1., 1., -1., 1., 1.],
[-1., -1., 1., -1., -1.],
[ 1., 1., -1., 1., 1.],
[ 1., 1., -1., 1., 1.]])
如何让python返回像R中那样的3x2矩阵?或者,我应该如何在Python的5x5矩阵中选择正确的值,使其与R的结果相匹配?
在R中,当x
和y
是矩阵时,cor(x,y)
将返回x
(n=3(的列与y
(n=2(的列的相关性。在python中,可以使用正确的索引对np.corrcoef()
的结果进行切片,在本例中,对于结果的x
(行(和y
(列(,索引分别为3和2。
np.corrcoef(X,Y)[0:3,0:2]
array([[ 1., 1.],
[ 1., 1.],
[-1., -1.]])