Numpy学习3--统计相关

1. 次序统计

1. 1 计算最小值

np.amin(a,axis=0/1)       #a表示矩阵,axis表示选中矩阵的列或者行(0列1行)
  • y = np.amin(x) %矩阵x所有数的最小值
  • y = np.amin(x, axis=0) %矩阵x每一列的最小值,axis表示行还是列:0列,1行
  • y = np.amin(x, axis=1) %矩阵x每一行的最小值
import numpy as np
x=np.array([[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20],
[21, 22, 23, 24, 25],
[26, 27, 28, 29, 30],
[31, 32, 33, 34, 35]])

a1=np.amin(x)           #对矩阵A全局搜索最小值       
print('a1= ',a1)        #结果:11
a2=np.amin(x,axis=0)    #对矩阵A每一列寻找最小值   
a3=np.amin(x,axis=1)    #对矩阵A每一行寻找最小值   
print('a2= ',a2)        #结果:[11 12 13 14 15]
print('a3= ',a3)        #结果:[11 16 21 26 31]

1.2 计算最大值

np.amax (a,axis=0/1)       #a表示矩阵,axis表示选中矩阵的列或者行(0列1行)
  • y = np.amax(x) %矩阵x所有数的最大值
  • y = np.amax(x, axis=0) %矩阵x每一列的最大值
  • y = np.amax(x, axis=1) %矩阵x每一行的最大值
import numpy as np
x=np.array([[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20],
[21, 22, 23, 24, 25],
[26, 27, 28, 29, 30],
[31, 32, 33, 34, 35]])

a1=np.amax(x)           #对矩阵A全局搜索最小值       
print('a1= ',a1)        #结果:35
a2=np.amax(x,axis=0)    #对矩阵A每一列寻找最小值   
a3=np.amax(x,axis=1)    #对矩阵A每一行寻找最小值   
print('a2= ',a2)        #结果:a2=  [31 32 33 34 35]
print('a3= ',a3)        #结果:a3=  [15 20 25 30 35]

1.3 计算极差(最大值与最小值的差)

np.ptp(a,axis=0/1)   #a表示矩阵,axis表示选中矩阵的列或者行(0列1行)
  • y = np.ptp(x) %矩阵x所有数的极差
  • y = np.ptp(x, axis=0) %矩阵x每一列的极差
  • y = np.ptp(x, axis=1) %矩阵x每一行的极差
import numpy as np
np.random.seed(20201128)                   #固定随机数,某一时刻的随机数
x = np.random.randint(0, 20, size=[4, 5])  #生成一个随机数矩阵,范围为0-20,四行五列的矩阵
print('x=',x)
#x= [[10  2  1  1 16]
# [18 11 10 14 10]
# [11  1  9 18  8]
# [16  2  0 15 16]]
a1=np.ptp(x)            #对矩阵A全局搜索最小值       
print('a1= ',a1)        #结果:a1=  18
a2=np.ptp(x,axis=0)     #对矩阵A每一列寻找最小值   
a3=np.ptp(x,axis=1)     #对矩阵A每一行寻找最小值   
print('a2= ',a2)        #结果:a2=  [ 8 10 10 17  8]
print('a3= ',a3)        #结果:a3=  [15  8 17 16]

1.4 计算分位数

功能介绍:百分位数是统计中使用的度量,表示小于这个值的观察值的百分比

numpy.percentile(a, q, axis=0/1#常用到三个变量
  • a:矩阵或者向量
  • q:需要分的数,以百分比表示,可以设多个
  • axis:如果是矩阵,那么可以对列和行分别进行分数(0列1行)
import numpy as np
#np.random.seed(20201128)                   #固定随机数,某一时刻的随机数
#x = np.random.randint(0, 20, size=[4, 5])  #生成一个随机数矩阵,范围为0-20,四行五列的矩阵
#print('x=',x)
x=np.array([[1, 2 ,3, 4 ,5],
 [6, 7 ,8, 9, 10 ],
 [11,12,13 ,14, 15],
 [16 ,17 ,18,19, 20]])
a1=np.percentile(x,[50,75])            #大小处于50%的数,大小处于75%的数      
print('a1= ',a1)        #a1=  [10.5  15.25]
a2=np.percentile(x,[50,75],axis=0)     #大小处于50%的数,大小处于%的数,对矩阵A每一列寻找 
a3=np.percentile(x,[50,75],axis=1)     #大小处于50%的数,大小处于%的数,对矩阵A每一行寻找  
print('a2= ',a2)       
 #结果:a2=  [[ 8.5   9.5  10.5  11.5  12.5 ] 
 #            [12.25 13.25 14.25 15.25 16.25]]
print('a3= ',a3)        
#结果:a3=  [[ 3.  8. 13. 18.]
#            [ 4.  9. 14. 19.]]

2. 均值与方差

2.1 计算中位数

numpy.median(a,axis=0/1) 
  • numpy.median(x) %矩阵x所有数的中位数
  • numpy.median(x,axis=0) %矩阵x每一列的中位数
  • numpy.median(x,axis=1) %矩阵x每一行的中位数
import numpy as np
np.random.seed(20201128)                   #固定随机数,某一时刻的随机数
x = np.random.randint(0, 20, size=[4, 5])  #生成一个随机数矩阵,范围为0-20,四行五列的矩阵
print('x=',x)

a1=np.median(x)            #大小处于50%的数,大小处于75%的数      
print('a1= ',a1)           #a1=  9.0

a2=np.median(x,axis=0)     #大小处于50%的数,大小处于%的数,对矩阵A每一列寻找 
print('a2= ',a2)           #结果:a2=  [ 3.5 11.   2.5  7.5 13. ]

a3=np.median(x,axis=1)     #大小处于50%的数,大小处于%的数,对矩阵A每一行寻找  
print('a3= ',a3)           #结果:a3=  [ 4. 10. 10.  3.]

2.2 计算平均值

numpy.mean(a,axis=0/1) 

import numpy as np
x = np.array([[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20],
[21, 22, 23, 24, 25],
[26, 27, 28, 29, 30],
[31, 32, 33, 34, 35]])

y = np.mean(x)              #对矩阵A全局搜索最小值
print(y) # 23.0
y = np.mean(x, axis=0)      #对矩阵A每一列寻找最小值
print(y) # [21. 22. 23. 24. 25.]
y = np.mean(x, axis=1)     #对矩阵A每一行寻找最小值
print(y) # [13. 18. 23. 28. 33.]

2.3 计算加权平均值

numpy.average(a, axis=None, weights=None)
  • a:指定的矩阵
  • axis:0指定为列,1指定为行
  • weights:权重矩阵,大小和a同

mean()和average()函数的区别:
如果average()函数不指定矩阵,那么两者一样,如果加上权重矩阵,average()求解的加权平均值

import numpy as np
x = np.array([[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20],
[21, 22, 23, 24, 25],
[26, 27, 28, 29, 30],
[31, 32, 33, 34, 35]])
y = np.average(x)                #如果不指定权重,那么mean()函数和average()函数一致
y1 = np.mean(x)
print(y) # 23.0
print(y1) # 23.0import numpy as np

y = np.arange(1, 26).reshape([5, 5])    #定义权重矩阵
print(y)
# [[ 1 2 3 4 5]
# [ 6 7 8 9 10]
# [11 12 13 14 15]
# [16 17 18 19 20]
# [21 22 23 24 25]]
z = np.average(x, weights=y)             #全局的加权平均值
print(z) # 27.0
z = np.average(x, axis=0, weights=y)     #每一列的加权平均值
print(z)
# [25.54545455 26.16666667 26.84615385 27.57142857 28.33333333]
z = np.average(x, axis=1, weights=y)     #每一行的加权平均值
print(z)
# [13.66666667 18.25 23.15384615 28.11111111 33.08695652]

2.4 方差和样本方差(无偏估计)

方差:是在概率论和统计方差衡量随机变量或一组数据时离散程度的度量

numpy.var(a, axis=None,ddof=0
  • a:被操作的矩阵
  • axis:选择矩阵a的行或者列(0列1行),然后对其操作
  • ddof:如果ddof为1的话,那么就是计算样本方差的无偏估计

计算公式:

  • 方差
    s 2 = 1 n ∑ i = 1 n ( x i − x ‾ ) 2 {s^2} = \frac{1}{n}{\sum\limits_{i = 1}^n {({x_i} - \overline x )} ^2} s2=n1i=1n(xix)2
  • 样本方差
    S 2 = 1 n − 1 ∑ i = 1 n ( x i − x ‾ ) 2 {S^2} = \frac{1}{{n - 1}}{\sum\limits_{i = 1}^n {({x_i} - \overline x )} ^2} S2=n11i=1n(xix)2
    方差与样本方差的区别:其分母一个为n,一个为n-1

求解函数:
方差:

  • np.var(x)
  • np.mean((x ‐ np.mean(x)) ** 2)

样本方差:

  • numpy.cov(x)
  • numpy.var(x,ddof=1)
  • np.sum((x ‐ np.mean(x)) ** 2) / (x.size ‐ 1)
import numpy as np
x = np.array([[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20],
[21, 22, 23, 24, 25],
[26, 27, 28, 29, 30],
[31, 32, 33, 34, 35]])
y = np.var(x)                        #求矩阵x的方差  
print(y) # 52.0
y = np.mean((x ‐ np.mean(x)) ** 2)   #用公式求方差
print(y) # 52.0
y = np.var(x, ddof=1)                #样本方差无偏估计
print(y) # 54.166666666666664
y = np.sum((x ‐ np.mean(x)) ** 2) / (x.size ‐ 1)  #基础公式法求样本方差无偏估计
print(y) # 54.166666666666664
y = np.cov(x)                       #用协方差的公式求样本方差无偏估计
y = np.var(x, axis=0)                #求矩阵x每一列的的方差  
print(y) # [50. 50. 50. 50. 50.]
y = np.var(x, axis=1)                #求矩阵x每一行的的方差
print(y) # [2. 2. 2. 2. 2.]

2.5 标准差

标准差: 标准差是一组数据平均值分散程度的一种度量,是方差的算术平方根

numpy.std(a, axis=None)
  • a:被操作的矩阵
  • axis:选择矩阵a的行或者列(0列1行),然后对其操作

计算公式:

  • 总体标准差

s = 1 n ∑ i = 1 n ( x i − x ‾ ) 2 s = \sqrt {\frac{1}{n}{{\sum\limits_{i = 1}^n {({x_i} - \overline x )} }^2}} s=n1i=1n(xix)2

  • 样本标准差
    s = 1 n − 1 ∑ i = 1 n ( x i − x ‾ ) 2 s = \sqrt {\frac{1}{{n - 1}}{{\sum\limits_{i = 1}^n {({x_i} - \overline x )} }^2}} s=n11i=1n(xix)2
import numpy as np
x = np.array([[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20],
[21, 22, 23, 24, 25],
[26, 27, 28, 29, 30],
[31, 32, 33, 34, 35]])
y = np.std(x)
print(y) # 7.211102550927978   #用函数计算矩阵x的总体标准差
y = np.sqrt(np.var(x))
print(y) # 7.211102550927978   #通过方差求根计算标准差
y = np.std(x, axis=0)          #用函数计算矩阵x每一列的总体标准差
print(y)                     
# [7.07106781 7.07106781 7.07106781 7.07106781 7.07106781]
y = np.std(x, axis=1)          #用函数计算矩阵x每一行的总体标准差
print(y)
# [1.41421356 1.41421356 1.41421356 1.41421356 1.41421356]

3. 相关性

3.1 协方差

协方差: 协方差在概率论和统计学中用于衡量两个变量的总体误差。而方差是协方差的一种特殊情况,即当两个变量是相同的情况。

numpy.cov(x,y)  #向量x与y的协方差

计算公式:

  • 协方差

cov ⁡ ( X , Y ) = 1 n − 1 ∑ i = 1 n ( X i − X ‾ ) ( Y i − Y ‾ ) \operatorname{cov} (X,Y) = \frac{1}{{n - 1}}\sum\limits_{i = 1}^n {({X_i} - \overline X } )({Y_i} - \overline Y ) cov(X,Y)=n11i=1n(XiX)(YiY)

  • 协方差矩阵
    在这里插入图片描述
    在这里插入图片描述
import numpy as np
x = [1, 2, 3, 4, 6]                  #定义向量x
y = [0, 2, 5, 6, 7]                  #定义向量y


#只有单个向量的时候,求解的是样本方差
print(np.cov(x)) # 3.7               #样本x的方差
print(np.var(x,ddof=1)) # 3.7        #样本x的方差
print(np.cov(y)) # 8.5               #样本y的方差
print(np.var(y,ddof=1)) # 8.5        #样本y的方差

#函数中有两个向量的时候,求的是协方差矩阵
print(np.cov(x, y))            #样本协方差矩阵
# [[3.7 5.25]# [5.25 8.5 ]]

z = np.mean((x-np.mean(x)) * (y-np.mean(y))) #协方差
print(z) # 4.2

z = np.sum((x-np.mean(x)) * (y-np.mean(y))) / (len(x)-1) #样本x与y的协方差    
print(z) # 5.25
z = np.dot(x-np.mean(x), y-np.mean(y)) / (len(x)-1)      #样本x与y协方差
print(z) # 5.25

3.2 相关系数

相关系数: 相关系数实际上是正则化的协方差

numpy.corrcoef(x,y)  #向量x与y的相关系数

计算公式:
ρ x , y = cov ⁡ ( X , Y ) s ( X ) ∗ s ( Y ) {\rho _{x,y}} = \frac{{\operatorname{cov} (X,Y)}}{{s(X)*s(Y)}} ρx,y=s(X)s(Y)cov(X,Y)
函数中分子是x与y的协方差,分母是x和y的标准差,也叫作皮尔逊相关系数

import numpy as np
np.random.seed(20200623)    #固定一个时刻的随机数
x, y = np.random.randint(0, 20, size=(2, 4))    #随机生成一组范围为0-20的两行四列的随机数
print(x) # [10 2 1 1]      #第一行和第二行分别用x,y表示
print(y) # [16 18 11 10]
z = np.corrcoef(x, y)      #通过函数求解x与y的相关系数
print(z)
# [[1. 0.48510096]
# [0.48510096 1. ]]

#通过初始公式计算相关系数
a = np.dot(x-np.mean(x), y-np.mean(y))            #首先求解的是x与y的协方差
b = np.sqrt(np.dot(x-np.mean(x), x-np.mean(x))    #计算x的标准差
c = np.sqrt(np.dot(y-np.mean(y), y-np.mean(y)))   #计算y的标准差
print(a / (b * c)) # 0.4851009629263671

协方差公式的图片来源:https://blog.csdn.net/Mr_HHH/article/details/78490576

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值