NumPy(Numerical Python的缩写)是一个开源的Python科学计算库。使用NumPy,就可以很自然地使用数组和矩阵。NumPy包含很多实用的数学函数,涵盖线性代数运算、傅里叶变换和随机数生成等功能。本文主要介绍一下NumPy中cov方法的使用。

numpy.cov

numpy.cov(m, y=None, rowvar=True, bias=False, ddof=None, fweights=None, aweights=None)    [source]

给定数据和权重,估计协方差矩阵。

协方差表示两个变量一起变化的水平。如果我们检查N维样本,httpswwwcjavapycom则协方差矩阵元素httpswwwcjavapycomhttpswwwcjavapycomhttpswwwcjavapycom的协方差。httpswwwcjavapycom元素是httpswwwcjavapycom的方差。

有关算法的概述,请参见注释。

参数 :

m :array_like

一维或二维数组,其中包含多个变量和观察值。

 m的每一行代表一个变量,

每一列代表所有这些变量的单个观察值。

另请参见下面的rowvar。

y :array_like, 可选

一组额外的变量和观察值。 y具有与m相同的形式。

rowvar :bool, 可选

如果rowvar为True(默认值),

则每一行代表一个变量,各列中带有观察值。

否则,该关系将转置:每一列代表一个变量,而行包含观察值。

bias :bool, 可选

默认归一化(False)由(N-1)表示,

其中N是给出的观测值数量(无偏估计)。如果bias为True,

则归一化为N。在numpy版本>= 1.5中,

可以使用关键字ddof覆盖这些值。

ddof :int, 可选

如果不是,则将覆盖默认值。 

请注意,即使指定了权重和权重,ddof = 1也将返回无偏估计,

ddof = 0将返回简单的平均值。 有关详细信息,

请参见注释。 默认值为None。 1.5版的新功能。

fweights :array_like, int, 可选

一维整数频率权重数组;

 每个观察向量应重复的次数。

 1.10版的新功能。

aweights :array_like, 可选

一维观测向量权重数组。 

这些相对权重对于被认为“important”的观察值通常较大,

而对于被认为不太“important”的观察值较小。 

如果ddof = 0,则权重数组可用于将概率分配给观察向量。

 1.10版的新功能。

返回值 :

out :ndarray

变量的协方差矩阵。

Notes

假设观测值位于观测值数组m的列中,为了简便起见,使f = fweightsa = 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)

例子

考虑两个变量httpswwwcjavapycomhttpswwwcjavapycom,它们完全相关,但方向相反:

>>> x = np.array([[0, 2], [1, 1], [2, 0]]).T
>>> x
array([[0, 1, 2],
       [2, 1, 0]])

注意增加httpswwwcjavapycom而减少httpswwwcjavapycom。协方差矩阵清楚地表明了这一点:

>>> np.cov(x)
array([[ 1., -1.],
       [-1.,  1.]])

请注意,显示httpswwwcjavapycomhttpswwwcjavapycom之间的相关性的elementhttpswwwcjavapycom为负。

此外,请注意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)

推荐文档

相关文档

大家感兴趣的内容

随机列表