numpy.cov

numpy.cov(m, y=None, rowvar=True, bias=False, ddof=None, fweights=None, aweights=None, *, dtype=None)[源代码]

估计一个协方差矩阵,给定数据和权重。

协方差表示两个变量一起变化的水平。如果我们检查N维样本, X = [x_1, x_2, ... x_N]^T ,然后是协方差矩阵元素 C_{{ij}} 是的协方差 x_ix_j . 元素 C_{{ii}} 是的方差 x_i .

有关算法的概述,请参见注释。

参数
marray_like

包含多个变量和观测值的一维或二维数组。每行 m 表示一个变量,每列都是对所有这些变量的单个观察。也看到 rowvar 下面。

y阵列式,可选

一组附加的变量和观察值。 y 与…的形式相同 m .

rowvar可选的布尔

如果 rowvar 为真(默认值),则每行代表一个变量,列中包含观测值。否则,关系将被转置:每列表示一个变量,而行包含观测值。

bias可选的布尔

默认规范化(false)是由 (N - 1) 在哪里 N 是给出的观察数(无偏估计)。如果 bias 是真的,那么规范化是通过 N . 可以使用关键字重写这些值 ddof 在numpy版本中>=1.5。

ddof可选的

如果没有 None 默认值由 bias 被重写。注意 ddof=1 将返回无偏估计,即使两者都是 fweightsaweights 已指定,并且 ddof=0 将返回简单平均值。详情请参见注释。默认值为 None .

1.5 新版功能.

fweights数组类似,int,可选

一维整数频率权重数组;应重复每个观测向量的次数。

1.10 新版功能.

aweights阵列式,可选

一维观测向量权重数组。这些相对权重对于被视为“重要”的观测值通常较大,而对于被视为“不重要”的观测值则较小。如果 ddof=0 权重数组可用于将概率分配给观测向量。

1.10 新版功能.

dtype数据类型,可选

结果的数据类型。默认情况下,返回数据类型至少有 numpy.float64 精度。

1.20 新版功能.

返回
out恩达雷

变量的协方差矩阵。

参见

corrcoef

归一化协方差矩阵

笔记

假设观测值位于观测阵列的列中 mf = fweightsa = aweights 为简洁起见。计算加权协方差的步骤如下:

>>> m = np.arange(10, dtype=np.float64)
>>> f = np.arange(10) * 2
>>> a = np.arange(10) ** 2.
>>> ddof = 1
>>> w = f * a
>>> v1 = np.sum(w)
>>> v2 = np.sum(w * a)
>>> m -= np.sum(m * w, axis=None, keepdims=True) / v1
>>> cov = np.dot(m * w, m.T) * v1 / (v1**2 - ddof * v2)

注意什么时候 a == 1 ,标准化因子 v1 / (v1**2 - ddof * v2) 转到 1 / (np.sum(f) - ddof) 应该如此。

实例

考虑两个变量, x_0x_1 ,两者完全相关,但方向相反:

>>> x = np.array([[0, 2], [1, 1], [2, 0]]).T
>>> x
array([[0, 1, 2],
       [2, 1, 0]])

注意如何 x_0 增加而 x_1 减少。协方差矩阵清楚地显示了这一点:

>>> np.cov(x)
array([[ 1., -1.],
       [-1.,  1.]])

注意这个元素 C_{{0,1}} ,显示了 x_0x_1 是否定的。

另外,注意如何 xy 组合:

>>> x = [-2.1, -1,  4.3]
>>> y = [3,  1.1,  0.12]
>>> X = np.stack((x, y), axis=0)
>>> np.cov(X)
array([[11.71      , -4.286     ], # may vary
       [-4.286     ,  2.144133]])
>>> np.cov(x, y)
array([[11.71      , -4.286     ], # may vary
       [-4.286     ,  2.144133]])
>>> np.cov(x)
array(11.71)