2020年9月11日 / 240次阅读 / Last Modified 2020年9月11日
NumPy
numpy.cov函数计算协方差(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
前一篇:用numpy计算均值,方差,标准差
后一篇:用numpy计算Pearson相关系数
Ctrl+D 收藏本页
©Copyright 麦新杰 Since 2019 Python笔记