numpy.cov #

麻木的。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_i\)\(x_j\)。元素\(C_{ii}\)是方差\(x_i\)

请参阅注释以了解算法的概要。

参数
m类数组

包含多个变量和观测值的一维或二维数组。m的每一行代表一个变量,每一列代表所有这些变量的单个观察值。另请参阅下面的rowvar

y类似数组,可选

一组额外的变量和观察结果。y具有与m相同的形式。

rowvar布尔值,可选

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

偏差布尔值,可选

默认归一化 (False) 为,其中是给定的观测值数量(无偏估计)。如果偏差为 True,则标准化为。这些值可以通过使用numpy 版本 >= 1.5 中的关键字来覆盖。(N - 1)NNddof

ddof int,可选

如果不是,则偏差None隐含的默认值将被覆盖。请注意,即使 指定了fweightsaweights ,也会返回无偏估计,并且会返回简单平均值。详细信息请参阅注释。默认值为。ddof=1ddof=0None

1.5版本中的新功能。

fweights array_like,int,可选

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

1.10 版本中的新功能。

aweights array_like,可选

观察向量权重的一维数组。对于被认为“重要”的观察结果,这些相对权重通常较大,对于被认为不太“重要”的观察结果,这些相对权重通常较小。权重数组是否ddof=0可用于为观察向量分配概率。

1.10 版本中的新功能。

dtype数据类型,可选

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

1.20 版本中的新增功能。

返回
输出数组

变量的协方差矩阵。

也可以看看

corrcoef

归一化协方差矩阵

笔记

为简洁起见,假设观测值位于观测值数组m和 let的列中。计算加权协方差的步骤如下:f = 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 == 1v1 / (v1**2 - ddof * v2)1 / (np.sum(f) - ddof)

例子

考虑两个变量,\(x_0\)\(x_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_0\)\(x_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)