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_i\) 和 \(x_j\) 的协方差. 元素 \(C_{ii}\) 是 \(x_i\) 的方差.
有关算法的概述,请参见注释.
- 参数:
- marray_like
包含多个变量和观测值的 1-D 或 2-D 数组. m 的每一行代表一个变量,每一列代表所有这些变量的单个观测值.另请参见下面的 rowvar .
- yarray_like, optional
另一组变量和观测值. y 的形式与 m 的形式相同.
- rowvarbool, 可选
如果 rowvar 为 True(默认值),则每一行代表一个变量,观测值在列中.否则,关系被转置:每一列代表一个变量,而行包含观测值.
- biasbool, 可选
默认归一化 (False) 是
(N - 1),其中N是给定的观测值的数量(无偏估计). 如果 bias 为 True,则归一化为N. 这些值可以使用 numpy 版本 >= 1.5 中的关键字ddof来覆盖.- ddof整数,可选
如果不是
None,则 bias 隐含的默认值将被覆盖. 请注意,即使指定了 fweights 和 aweights ,ddof=1也会返回无偏估计,并且ddof=0将返回简单平均值. 有关详细信息,请参见注释. 默认值为None.- fweightsarray_like, int, 可选
整数频率权重的 1-D 数组; 每个观测向量应重复的次数.
- aweightsarray_like, optional
观测向量权重的 1-D 数组. 这些相对权重对于被认为“重要”的观察结果通常很大,对于被认为不太“重要”的观察结果则较小. 如果
ddof=0,则权重数组可用于为观测向量分配概率.- dtypedata-type,可选
结果的数据类型.默认情况下,返回的数据类型将具有至少
numpy.float64精度.在 1.20 版本加入.
- 返回:
- outndarray
变量的协方差矩阵.
参见
corrcoef归一化的协方差矩阵
注释
假设观测值位于观测数组 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 / (v12 - ddof * v2)转换为1 / (np.sum(f) - ddof),应该是这样.示例
>>> import numpy as np
考虑两个变量 \(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\) 之间的相关性,是负数.
此外,请注意 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)