numpy.cov
numpy.cov(m, y=None, rowvar=True, bias=False, ddof=None, fweights=None, aweights=None) [source]
给定数据和权重,估计协方差矩阵。
协方差表示两个变量一起变化的水平。如果我们检查N维样本,则协方差矩阵元素是和的协方差。元素是的方差。
有关算法的概述,请参见注释。
参数 : | m :array_like 一维或二维数组,其中包含多个变量和观察值。 m的每一行代表一个变量, 每一列代表所有这些变量的单个观察值。 另请参见下面的rowvar。 y :array_like, 可选 一组额外的变量和观察值。 y具有与m相同的形式。 rowvar :bool, 可选 如果rowvar为True(默认值), 则每一行代表一个变量,各列中带有观察值。 否则,该关系将转置:每一列代表一个变量,而行包含观察值。 bias :bool, 可选 默认归一化(False)由 其中 则归一化为N。在numpy版本>= 1.5中, 可以使用关键字 ddof :int, 可选 如果不是,则将覆盖默认值。 请注意,即使指定了权重和权重, 而 请参见注释。 默认值为None。 1.5版的新功能。 fweights :array_like, int, 可选 一维整数频率权重数组; 每个观察向量应重复的次数。 1.10版的新功能。 aweights :array_like, 可选 一维观测向量权重数组。 这些相对权重对于被认为“important”的观察值通常较大, 而对于被认为不太“important”的观察值较小。 如果 1.10版的新功能。 |
返回值 : | out :ndarray 变量的协方差矩阵。 |
Notes
假设观测值位于观测值数组m的列中,为了简便起见,使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.]])
请注意,显示和之间的相关性的element为负。
此外,请注意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)