为了账号安全,请及时绑定邮箱和手机立即绑定

R 和 Python 之间 cov 和 cor 的区别

R 和 Python 之间 cov 和 cor 的区别

慕容708150 2021-08-05 16:52:08
我经常使用 R 并且我是 Python 的新手。在R中,计算给定矩阵的均值、cov和cor的演示如下:X = matrix(c(1,0.5,3,7,9,6,2,8,4), nrow=3, ncol=3, byrow=FALSE)X    # [,1] [,2] [,3]# [1,]  1.0    7    2# [2,]  0.5    9    8# [3,]  3.0    6    4M = colMeans(X) # apply(X,2,mean)M# [1] 1.500000 7.333333 4.666667S = cov(X)S    # [,1]      [,2]      [,3]# [1,]  1.75 -1.750000 -1.500000# [2,] -1.75  2.333333  3.666667# [3,] -1.50  3.666667  9.333333R = cor(X)R        # [,1]       [,2]       [,3]# [1,]  1.0000000 -0.8660254 -0.3711537# [2,] -0.8660254  1.0000000  0.7857143# [3,] -0.3711537  0.7857143  1.0000000我想在 Python 中重现上述内容,然后尝试:import numpy as npX = np.array([1,0.5,3,7,9,6,2,8,4]).reshape(3, 3)X = np.transpose(X) # byrow=FALSEX# array([[ 1. ,  7. ,  2. ],    # [ 0.5,  9. ,  8. ],    # [ 3. ,  6. ,  4. ]])M = X.mean(axis=0) # colMeansM# array([ 1.5       ,  7.33333333,  4.66666667])S = np.cov(X)S# array([[ 10.33333333,  10.58333333,   4.83333333],    # [ 10.58333333,  21.58333333,   5.83333333],    # [  4.83333333,   5.83333333,   2.33333333]])R = np.corrcoef(X)R# array([[ 1.        ,  0.70866828,  0.98432414],    # [ 0.70866828,  1.        ,  0.82199494],    # [ 0.98432414,  0.82199494,  1.        ]])那么cov和cor的结果就不一样了。为什么?
查看完整描述

3 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

这是因为numpy按行和R列计算。要么注释掉X = np.transpose(X) # byrow=FALSE,要么使用np.cov(X, rowvar=False).

np.cov(X, rowvar=False)
    array([[ 1.75      , -1.75      , -1.5       ],
       [-1.75      ,  2.33333333,  3.66666667],
       [-1.5       ,  3.66666667,  9.33333333]])

各自的文档(强调我的)中解释了差异:

Python:

help(np.cov)

rowvar : bool,可选 如果rowvar为 True(默认),则每一代表一个变量,在列中观察。否则,关系被转置:每一列代表一个变量,而行包含观察。

回复:

?cov

var、cov 和 cor 计算 x 的方差以及 x 和 y 的协方差或相关性(如果它们是向量)。如果x和y是矩阵,则之间的协方差(或相关性)X和Y的列计算的。


查看完整回答
反对 回复 2021-08-05
?
精慕HU

TA贡献1845条经验 获得超8个赞

如果我不在 Python 中转置数组,那么我会得到完全相同的答案。

协方差是按行计算的(X[0]返回第一行),我怀疑 R 以 Fortran 顺序存储数据,而 Python/Numpy 使用 C 顺序。这解释了mean计算方式的不同,第一个轴是 Python 中的行,而不是列。


查看完整回答
反对 回复 2021-08-05
  • 3 回答
  • 0 关注
  • 459 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号