numpy的数字统计函数

三:numpy的数字统计函数:
  1.numpy有哪些数学统计函数:
     (1)np.sum    -------所有元素的和
     (2)np.prod   -------所有元素的乘积
     (3)np.cumsum -------元素的累积加和
     (4)np.cumprod-------元素的累积乘积
     (5)np.min    -------最小值
     (6)np.max    -------最大值
     (7)np.percentile      -----0——100百分数
     (8)np.quantile        -----0——1分位数
     (9)np.median         ------中位数
     (10)np.average       ------加权平均,参数可以指定weights
     (11)np.mean          ------平均值
     (12)np.std           ------标准差
     (13)np.var           -----方差
2.怎么实现按不同的axis计算(以上函数,都有一个参数叫做axis用于指定计算轴为行还是列,如果不指定,那么会计算所有元素的结果)
3.实例:机器学习将数据进行标准化
   A=(A-mean(A,axis=0))/std(A,axis=0)
1b:
  

 import numpy as np
   arr=np.arange(12).reshape(3,4)   #array([[0,1,2,3],[4,5,6,7],[8,9,10,11]])
   np.sum(arr)    #66
   np.prod(arr)  #0
   np.comsum(arr)   #array([0,1,3,6,10,15,21,28,36,45,55,66],dtype=int32)
   np.cumprod(arr)   #array([0,0,0,0,0,0,0,0,0,0,0,0],dtype=int32)
   np.min(arr)       #0
   np.max(arr)       #11
   np.percentile(arr,[25,50,75])    #我的理解他会将arr排序,找到25%,50%,75%的数字   
                                    #2.75,5.5,8.25
   np.quantile(arr,[0.25,0.5,0.75])   #2.75,5.5,8.25
   np.mean(arr)   #5.5
   np.std(arr)   #标准差 3.4520
   np.var(arr)    #方差 11.916666
   #weights的shape需要和arr一样
   weights=np.random.rand(*arr.shape)   #确保weights类型和arr类型一致
   np.average(arr,weights=weights)    #加权平均

2b:
   axis=0代表行,axis=1代表列
   但是对于sum/mean/media等聚合函数:axis=0代表把行消解掉,axis=1代表把列消解掉。axis=0代表跨行计算,axis=1代表跨列计算
 

  arr    #array([[0,1,2,3],[4,5,6,7],[8,9,10,11]])
  arr.sum(axis=0)   #array([12,15,18,21])
  arr.sum(axis=1)   #array([6,22,38])
  arr.cumsum(axis=0)  #array([[0,1,2,3],[4,6,8,10],[12,15,18,21]])
  arr.cumsum(axis=1)   #array([[0,1,3,6],[4,9,15,22],[8,17,21,38]])


3b:
   arr=np.arange(12).reshape(3,4)
   #arr如果对应到现实世界的一种解释,行:每行对应一个样本数据。列:每列代表样本的一个特征(就是三个样本,四个特征)
   #数据标准化:对于机器学习,神经网路来说,不同列的量纲应该相同,训练收敛的更快;比如商品价格是0到100元,销量是1万到10万个,这俩数字没有可比性(一个只有100.另外一个9万),因此需要先都做标准化;
   #不同列代表不同的特征,因此需要axis=0做计算,标准化一般使用A=(A-mean(A,axis=0))/std(A,axis=0)公式进行
  

#计算每列的均值
mean=np.mean(arr,axis=0)    #[4,5,6,7]
#计算每列的标准差
std=np.std(arr,axis=0)
#计算分子,注意每行都会分别减去[4,5,6,7]这叫做numpy的广播
fenzi=arr-mean
result=fenzi/std

用随机数在试一下:
  

arr2=np.random.randint(1,100,size=(3,4))
result=(arr2-np.mean(arr2,axis=0))/np.std(arr2,axis=0)


四:numpy实现数组中满足条件个数的计算:
  需求:有一个非常大的数组比如一亿个数字,求出里面数字小于5000的数字数目
  (1)使用numpy的rendom模块生成1亿个数字
       

import numpy as np
arr=np.random.randint(1,10000,size=int(1e8))


  (2)使用python的原生语法实现
       

 pyarr=list(arr)
 len([x for x in pyarr if x>5000])     
 %timeit len([x for x in pyarr if x>5000])   #记一下时间


(3)使用numpy的向量化操作实现:
       

arr[arr>5000].size
%timeit arr[arr>5000].size

你可能感兴趣的:(深度学习,numpy,python,机器学习)