一、np.var
数学上学过方差:
$$D(X)=\sum_{i\in [0,n)} ({x-\bar{x}})^2 $$
np.var实际上是均方差。
函数原型:numpy.var(a, axis=None, dtype=None, out=None, ddof=0, keepdims=<class numpy._globals._NoValue>)
计算张量a在axis轴上的方差
- a:一个ndarray,不一定是一维
- axis:可取值为None,int,int元组。当取值为None时,会把张量a展平成一维数组;当指定一个或多个int时,沿着axis指定的轴计算方差,其它轴的形状会保留。
- dtype:在计算方差的时候使用的数据类型,如果a是int类型的张量,计算方差时也会使用float32类型
- out:放置计算结果的数组,主要用于节省空间,out的维度必须保证正确
- ddof:int,ddof是“Delta Degrees of Freedom”,表示自由度的个数,在计算方差时,分子是各个值和均值的差的平方之和,分母为(N-ddof)
- keepdims:是否保留a的形状
返回值variance是一个ndarray
import numpy as np
a = np.random.randint(0, 10, (2, 3))
print(a)
print(np.var(a))
print(np.var(a, axis=0))
print(np.var(a, axis=1))
print(np.var(a, keepdims=True))
print(np.var(a, axis=0, keepdims=True))
print(np.var(a, axis=(0, 1)))
输出为
[[2 1 5]
[7 3 0]]
5.666666666666667
[6.25 1. 6.25]
[2.88888889 8.22222222]
[[5.66666667]]
[[6.25 1. 6.25]]
5.666666666666667
关于ddof
import numpy as np
a = np.random.randint(0, 10, 4)
print(np.var(a), '=',np.sum((a - np.mean(a)) ** 2) / len(a))
ddof = 1
print(np.var(a, ddof=ddof), '=',np.sum((a - np.mean(a)) ** 2) / (len(a) - ddof))
二、np.cov
numpy.cov(m, y=None, rowvar=True, bias=False, ddof=None, fweights=None, aweights=None)
数学上的协方差的定义:
$$ cov(X,Y)= (X-\bar{X})\cdot (Y-\bar{Y}) $$
此式中,X和Y皆为向量。
方差是特殊的协方差D(X)=cov(X,X)
但是,D(X)=cov(X,X)这个式子是一种有偏估计,真正的无偏估计分母是(len(a)-1)。
a = [1, 2, 3, 4, 6]
print(np.cov(a), np.var(a) * len(a) / (len(a) - 1))
三、np.correlate
相关系数的定义
$$\ro(X,Y)=\frac{cov(X,Y)}{\sqrt{cov(X,X)\times cov(Y,Y)}}$$
函数原型:numpy.corrcoef(x, y=None, rowvar=True, bias=<class ‘numpy._globals._NoValue‘>, ddof=<class ‘numpy._globals._NoValue‘>)
参考资料
原文地址:https://www.cnblogs.com/weiyinfu/p/10693445.html
时间: 2024-10-07 22:03:33