NumPy参考 >例行程序 >Statistics > numpy.cov
numpy.
cov
(m,y = None,rowvar = True,bias = False,ddof = None,fweights = None,aweights = None )[源代码] ¶给定数据和权重,估计协方差矩阵。
协方差表示两个变量一起变化的水平。如果我们检查N维样本,,则协方差矩阵元素
是的协方差
和
。元素
是的方差
。
有关算法的概述,请参见注释。
一维或二维数组,其中包含多个变量和观察值。m的每一行代表一个变量,每列代表所有这些变量的单个观察值。另请参见下面的rowvar。
一组额外的变量和观察值。y具有与m相同的形式。
如果rowvar为True(默认值),则每一行代表一个变量,各列中带有观察值。否则,该关系将转置:每一列代表一个变量,而行包含观察值。
默认归一化(False)是通过,其中是给出的观察数(无偏估计)。如果偏差为True,则归一化为。可以在numpy版本> = 1.5中使用关键字来覆盖这些值。(N - 1)
N
N
ddof
如果不是None
,则覆盖由偏置隐含的默认值。请注意ddof=1
,即使同时指定了权重和权重,这也将返回无偏估计
,并且ddof=0
将返回简单平均值。有关详细信息,请参见注释。默认值为None
。
1.5版中的新功能。
一维整数频率权重数组;每个观察向量应重复的次数。
1.10版的新功能。
一维观测向量权重数组。这些相对权重对于被认为“重要”的观察值通常较大,而对于被认为“不太重要”的观察值则较小。如果ddof=0
权重的阵列可用于概率分配给观测向量。
1.10版的新功能。
变量的协方差矩阵。
也可以看看
corrcoef
归一化协方差矩阵
笔记
假定观测是在观察阵列的列米,并让和为了简洁。计算加权协方差的步骤如下:f = fweights
a = 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 = np.array([[0, 2], [1, 1], [2, 0]]).T
>>> x
array([[0, 1, 2],
[2, 1, 0]])
注意增加而
减少。协方差矩阵清楚地表明了这一点:
>>> np.cov(x)
array([[ 1., -1.],
[-1., 1.]])
需要注意的是元件,其示出之间的相关性
和
,是负的。
此外,请注意x和y的组合方式:
>>> 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)