70

我试图弄清楚如何使用 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 函数像我写的那样执行吗?

谢谢,

戴夫

4

3 回答 3

133

ab是一维序列时,numpy.cov(a,b)[0][1]等价于您的cov(a,b).

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

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

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

(同样,cov您在上面定义的函数。)

于 2013-03-10T01:40:55.607 回答
33

感谢 unutbu 的解释。默认情况下 numpy.cov 计算样本协方差。要获得总体协方差,您可以通过总 N 个样本指定归一化,如下所示:

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

或像这样:

numpy.cov(a, b, ddof=0)[0][1]
于 2016-08-23T10:12:25.097 回答
4

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

使用statistics.covariancewhich 是两个输入的联合可变性的度量(您正在寻找的数字):

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
于 2021-05-13T16:35:07.340 回答