numpy.
cov
估计一个协方差矩阵,给定数据和权重。
协方差表示两个变量一起变化的水平。如果我们检查N维样本, ,然后是协方差矩阵元素 是的协方差 和 . 元素 是的方差 .
有关算法的概述,请参见注释。
包含多个变量和观测值的一维或二维数组。每行 m 表示一个变量,每列都是对所有这些变量的单个观察。也看到 rowvar 下面。
一组附加的变量和观察值。 y 与…的形式相同 m .
如果 rowvar 为真(默认值),则每行代表一个变量,列中包含观测值。否则,关系将被转置:每列表示一个变量,而行包含观测值。
默认规范化(false)是由 (N - 1) 在哪里 N 是给出的观察数(无偏估计)。如果 bias 是真的,那么规范化是通过 N . 可以使用关键字重写这些值 ddof 在numpy版本中>=1.5。
(N - 1)
N
ddof
如果没有 None 默认值由 bias 被重写。注意 ddof=1 将返回无偏估计,即使两者都是 fweights 和 aweights 已指定,并且 ddof=0 将返回简单平均值。详情请参见注释。默认值为 None .
None
ddof=1
ddof=0
1.5 新版功能.
一维整数频率权重数组;应重复每个观测向量的次数。
1.10 新版功能.
一维观测向量权重数组。这些相对权重对于被视为“重要”的观测值通常较大,而对于被视为“不重要”的观测值则较小。如果 ddof=0 权重数组可用于将概率分配给观测向量。
结果的数据类型。默认情况下,返回数据类型至少有 numpy.float64 精度。
numpy.float64
1.20 新版功能.
变量的协方差矩阵。
参见
corrcoef
归一化协方差矩阵
笔记
假设观测值位于观测阵列的列中 m 让 f = fweights 和 a = aweights 为简洁起见。计算加权协方差的步骤如下:
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) 应该如此。
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)