Python 为什么np.corrcoef()规范化为统一?

Python 为什么np.corrcoef()规范化为统一?,python,numpy,Python,Numpy,我觉得这是一个愚蠢的问题,但是np.corrcoef()的站点 声明它返回C_ij/sqrt{C_iiC_jj},这意味着 print(np.corrcoef(np.identity(5))) 应该只返回标识矩阵。但相反,它又回来了 [[ 1. -0.25 -0.25 -0.25 -0.25] [-0.25 1. -0.25 -0.25 -0.25] [-0.25 -0.25 1. -0.25 -0.25] [-0.25 -0.25 -0.25 1. -0.25] [-

我觉得这是一个愚蠢的问题,但是np.corrcoef()的站点

声明它返回C_ij/sqrt{C_iiC_jj},这意味着

print(np.corrcoef(np.identity(5)))
应该只返回标识矩阵。但相反,它又回来了

[[ 1.   -0.25 -0.25 -0.25 -0.25]
[-0.25  1.   -0.25 -0.25 -0.25]
[-0.25 -0.25  1.   -0.25 -0.25]
[-0.25 -0.25 -0.25  1.   -0.25]
[-0.25 -0.25 -0.25 -0.25  1.  ]]
所以这个函数将每一行标准化为1。为什么这个函数声明返回C_ij/sqrt{C_iiC_jj}

谢谢你的快速回答。。。万一有人犯了同样的错误,正确的函数就在这里

from statsmodels.stats.moment_helpers import cov2corr

您误读的文档描述了相关系数矩阵和协方差矩阵之间的关系,而不是
numpy.corrcoef
的输出和输入之间的关系

如果要比较
numpy.corrcoef(numpy.identity(5))
numpy.cov(numpy.identity(5))
,您将看到您期望的关系。

从中,您可以看到在输入中调用了第一个
numpy.cov
。之后,进行规范化

c = cov(x, y, rowvar)
# ...
d = diag(c)
# ...    
stddev = sqrt(d.real)
c /= stddev[:, None]
c /= stddev[None, :]
# ...
return c
因此,文档中的“C”不是指函数的输入,而是指中间结果