Python 为什么np.corrcoef()规范化为统一?
我觉得这是一个愚蠢的问题,但是np.corrcoef()的站点 声明它返回C_ij/sqrt{C_iiC_jj},这意味着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] [-
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”不是指函数的输入,而是指中间结果