对于数据X = [0,0,1,1,0]
和Y = [1,1,0,1,1]
>> np.corrcoef(X,Y)
回报
array([[ 1. , -0.61237244],
[-0.61237244, 1. ]])
然而,我不能使用np.var
和np.cov
来重现这个结果,给出了http://docs.scipy.org/doc/numpy/reference/generated/numpy.corrcoef.html中所示的公式:
>> np.cov([0,0,1,1,0],[1,1,0,1,1])/sqrt(np.var([0,0,1,1,0])*np.var([1,1,0,1,1]))
array([[ 1.53093109, -0.76546554],
[-0.76546554, 1.02062073]])
怎么回事?
根据你的链接(http://docs.scipy.org/doc/numpy/reference/generated/numpy.corrcoef.html),你需要注意索引。。。
是的!
这是因为,
np.var
默认的delta自由度是0
,而不是1
。或者从另一个角度看:
实际情况是,
np.cov(m, y=None, rowvar=1, bias=0, ddof=None)
,当bias
和ddof
都不提供时,默认的规范化是N-1
,N是观察数。所以,这相当于有1
的δ自由度。不幸的是,np.var(a, axis=None, dtype=None, out=None, ddof=0, keepdims=False)
的默认值具有0
的默认增量自由度。如果不确定,最安全的方法是获取协方差矩阵的对角元素,而不是分别计算
var
,以确保一致的行为。相关问题 更多 >
编程相关推荐