用numpy计算协方差(covariance)

2020年9月11日 / 3次阅读 / Last Modified 2020年9月11日
NumPy

numpy.cov函数计算协方差(covariance),不过函数返回的是一个对称矩阵。协方差的数学定义如下:

协方差(covariance)
协方差(covariance)

numpy.cov函数在输入1D数据的时候,等于是在计算ddof=1是的方差:

>>> a
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> np.cov(a)
array(7.5)
>>> np.var(a)
6.666666666666667
>>> np.var(a, ddof=1)
7.5

np.cov输入2D数据时,默认是按row来区分数据(rowvar=True):

>>> xyz = np.random.randn(3,10)
>>> xyz
array([[-0.98774563,  0.01219101,  0.94765007,  0.47280046,  0.39754543,
         2.62015086, -2.42892013,  0.85784089, -2.09882408,  0.55928169],
       [-1.74792811,  0.91064638, -0.90492796,  0.24258947, -0.32412352,
         1.39211676, -1.38364279,  0.7452918 ,  0.89103796, -0.81576824],
       [-0.03584965,  0.99270734, -0.76944208,  0.37164058,  0.68762318,
        -1.15881331, -0.23819145,  0.71500193, -0.4342142 , -0.91170446]])
>>> np.cov(xyz)
array([[ 2.27351312,  0.6913542 , -0.18311099],
       [ 0.6913542 ,  1.18174757,  0.11762442],
       [-0.18311099,  0.11762442,  0.56214009]])

下面来验证一下:

>>> np.cov(xyz[0,:])
array(2.27351312)
>>> np.cov(xyz[1,:])
array(1.18174757)
>>> np.cov(xyz[2,:])
array(0.56214009)

以上是矩阵对角线的3个数字,分别对应x,y和z自己的无偏方差(ddof=1)。

>>> np.cov(xyz[0,:],xyz[1,:])
array([[2.27351312, 0.6913542 ],
       [0.6913542 , 1.18174757]])
>>> np.cov(xyz[1,:],xyz[2,:])
array([[1.18174757, 0.11762442],
       [0.11762442, 0.56214009]])

以上是按照np.cov(x,y)的模式调用cov函数,y是optional的。无奈np.cov的返回都是矩阵,cov(x,y)=cov(y,x),所以,都是对称矩阵。

-- EOF --

本文链接:https://www.pynote.net/archives/2464

留言区

电子邮件地址不会被公开。 必填项已用*标注


前一篇:
后一篇:

More


©Copyright 麦新杰 Since 2019 Python笔记

go to top