用 Python 和 Numpy 计算协方差

我试图弄清楚如何用 Python Numpy 函数 cov 计算协方差。当我传递给它两个一维数组时,我得到一个2x2的结果矩阵。我不知道该怎么办。我不擅长统计,但我相信在这种情况下协方差应该是一个单一的数字。这个就是我要找的。我自己写道:

def cov(a, b):


if len(a) != len(b):
return


a_mean = np.mean(a)
b_mean = np.mean(b)


sum = 0


for i in range(0, len(a)):
sum += ((a[i] - a_mean) * (b[i] - b_mean))


return sum/(len(a)-1)

这是可行的,但我认为 Numpy 版本效率更高,如果我能弄清楚如何使用它的话。

有人知道如何让 Numpy cov 函数像我写的那样运行吗?

谢谢,

戴夫

139557 次浏览

ab是一维序列时,numpy.cov(a,b)[0][1]相当于你的 cov(a,b)

np.cov(a,b)返回的2x2数组的元素等于

cov(a,a)  cov(a,b)


cov(a,b)  cov(b,b)

(其中,cov同样是上面定义的函数。)

感谢 unutbu 的解释。缺省情况下 numpy.cov 计算样本协方差。为了得到总体协方差,你可以指定 N 个样本的标准化,如下所示:

numpy.cov(a, b, bias=True)[0][1]

或者像这样:

numpy.cov(a, b, ddof=0)[0][1]

注意,从 Python 3.10开始,可以直接从标准库获得协方差。

使用 statistics.covariance,它是两个输入的联合可变性的度量(你要找的数字) :

from statistics import covariance


# x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# y = [1, 2, 3, 1, 2, 3, 1, 2, 3]
covariance(x, y)
# 0.75