dask.array.cov
dask.array.cov¶
- dask.array.cov(m, y=None, rowvar=1, bias=0, ddof=None)[源代码]¶
给定数据和权重,估计一个协方差矩阵。
此文档字符串是从 numpy.cov 复制的。
Dask 版本可能存在一些不一致性。
协方差表示两个变量共同变化的程度。如果我们考察 N 维样本,\(X = [x_1, x_2, ... x_N]^T\),那么协方差矩阵元素 \(C_{ij}\) 是 \(x_i\) 和 \(x_j\) 的协方差。元素 \(C_{ii}\) 是 \(x_i\) 的方差。
请参阅注释以了解算法的概要。
- 参数
- marray_like
一个包含多个变量和观测值的1维或2维数组。m 的每一行代表一个变量,每一列代表所有这些变量的一个单独观测值。另见下面的 rowvar。
- y类似数组, 可选
一组额外的变量和观察。y 的形式与 m 相同。
- rowvarbool, 可选
如果 rowvar 为 True(默认),那么每一行代表一个变量,观察值在列中。否则,关系被转置:每一列代表一个变量,而行包含观察值。
- 偏见bool, 可选
默认归一化(False)是按
(N - 1)
进行的,其中N
是给定的观测数(无偏估计)。如果 bias 为 True,则归一化按N
进行。这些值可以通过在 numpy 版本 >= 1.5 中使用关键字ddof
来覆盖。- ddofint, 可选
如果非
None
,则 bias 隐含的默认值将被覆盖。请注意,即使指定了 fweights 和 aweights ,ddof=1
也会返回无偏估计,而ddof=0
将返回简单平均值。详见注释。默认值为None
。1.5 新版功能.
- fweightsarray_like, int, 可选 (Dask 不支持)
整数频率权重的1-D数组;每个观测向量应重复的次数。
1.10 新版功能.
- aweightsarray_like, 可选 (Dask 不支持)
观测向量权重的1-D数组。这些相对权重通常对于被认为是“重要”的观测值较大,而对于被认为是较不“重要”的观测值较小。如果
ddof=0
,权重数组可以用于为观测向量分配概率。1.10 新版功能.
- dtype数据类型, 可选 (在Dask中不支持)
结果的数据类型。默认情况下,返回的数据类型将至少具有 numpy.float64 精度。
1.20 新版功能.
- 返回
- 出ndarray
变量的协方差矩阵。
参见
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 / (v1**2 - 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)