Numpy数字统计函数

一.Numpy数字统计函数

函数名                       说明
np.sum                   所有元素的和
np.prod                  所有元素的乘积
np.cumsum                元素的累积加和
np.cumprod               元素的累积乘积
np.min                   最小值
np.max                   最大值
np.percentile            0-100百分位
np.quantile              0-1分位数
np.median                中位数
np.average               加权平均,参数可以指定weights(位置)
np.mean                  平均值
np.std                   标准差
np.var                   方差

1.Numpy的数学统计函数

import numpy as np
arr=np.arange(12).reshape(3,4)
arr
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
np.sum(arr)
66
np.prod(arr)
0
np.cumsum(arr) # 3=0+1+2  6=0+1+2+3 .....
array([ 0,  1,  3,  6, 10, 15, 21, 28, 36, 45, 55, 66], dtype=int32)
np.cumprod(arr) # 因为有0,所以累积乘积为0
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int32)
np.min(arr)
0
np.max(arr)
11
# 排序为2,3,6,10,11,12,首先占比为0和占比100的当然就是最小值和最大值了;
# 其次占比为25%的数小于2.75;再次占比为50%的数小于5.5,即小于中位数;最后占比为75%的数小于8.25;

np.percentile(arr,[0,25,50,75,100])  # 2.75=(11+0)/4  5.5=(11+0)/2  8.25=(11+0)/4*3
array([ 0.  ,  2.75,  5.5 ,  8.25, 11.  ])
np.quantile(arr,[0,0.25,0.50,0.75,1]) # 和percentile 类似
array([ 0.  ,  2.75,  5.5 ,  8.25, 11.  ])
np.median(arr) # 中位数
5.5
np.mean(arr) # 平均值
5.5
np.std(arr) # 标准差
3.452052529534663
np.var(arr) # 方差
11.916666666666666
# weights的shape需要和arr一样,加权平均
weights= np.random.rand(*arr.shape)
np.average(arr,weights=weights)
5.88460046894379

二.怎样实现按不同axis计算

  • 以上函数都有一个参数axis用于指定计算轴为行还是列,如果不指定,那么会计算所有元素的结果。
  • axis=0表示行 axis=1表示列

对于sum/mean/median等聚合函数:

  • 理解1:axis=0表示把行消解掉 axis=1表示把列消解掉
  • 理解2:axis=0表示跨行计算 axis=1表示跨列计算
  • 二选一理解
  • 跨行等到列的数值 跨列得到行的数值
arr
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
np.sum(arr,axis=0) # 跨行计算,12=0+4+8  15=1+5+9 18=2+6+10  21=3+7+11
array([12, 15, 18, 21])
np.sum(arr,axis=1) # 跨列计算 6=0+1+2+3  22=4+5+6+7  38=8+9+10+11
array([ 6, 22, 38])
np.cumsum(arr,axis=0) # 跨行计算累积和 12=4+8 15=6+9 18=8+10 21=10+11
array([[ 0,  1,  2,  3],
       [ 4,  6,  8, 10],
       [12, 15, 18, 21]], dtype=int32)
np.cumsum(arr,axis=1) # 跨列计算
array([[ 0,  1,  3,  6],
       [ 4,  9, 15, 22],
       [ 8, 17, 27, 38]], dtype=int32)

三.实例:机器学习将数据进行标准化

A=(A-mean(A,axis=0))/std(A,axis=0)

1.将数据进行标准化

arr
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

arr对应显示中的一种解释:

  • 行:每行对应一个样本数据
  • 列:每列表示样本的一个特征
  • 比如行表示一个人的信息,列就表是这个人的姓名、年龄、性别等等

数据标准化:

  • 对于机器学习、神经网络来说、不同列的量纲应该相同,训练收益更快
  • 比如商品价格为0-100,销量为1w-10w,这两个数字是没有可比性的,因此需要先做标准化
  • 不同列代表的不同的特征,因此需要axis=0做计算
  • 标准化一般使用A=(A-mean(A,axis=0))/ std(A,axis=0)公式
# 计算每列的均值
mean=np.mean(arr,axis=0) # 跨行得到每列的数值
mean
array([4., 5., 6., 7.])
# 计算每列的方差
std=np.std(arr,axis=0)
std
array([3.26598632, 3.26598632, 3.26598632, 3.26598632])
# 计算分子,每行都会减去【4,5,6,7】,这叫做numpy的广播
fenzi=arr-mean  # 三行四列 减去 一行四列  常识不能计算,但是广播将一行四列复制成为了三行四列进行计算
fenzi
array([[-4., -4., -4., -4.],
       [ 0.,  0.,  0.,  0.],
       [ 4.,  4.,  4.,  4.]])
# 标准化
fenzi/std
array([[-1.22474487, -1.22474487, -1.22474487, -1.22474487],
       [ 0.        ,  0.        ,  0.        ,  0.        ],
       [ 1.22474487,  1.22474487,  1.22474487,  1.22474487]])

2.随机数再进行标准化

arr2=np.random.randint(1,100,size=(3,4))
arr2
array([[36, 96, 89,  5],
       [98,  2, 77, 82],
       [87, 15, 47, 84]])
# arr2减去所有列的均值再除以所有列的方差
result=(arr2-np.mean(arr2,axis=0))/np.std(arr,axis=0)
result
array([[-11.53301421,  17.86086271,   5.51135192, -15.92168333],
       [  7.4505313 , -10.92064177,   1.83711731,   7.65465545],
       [  4.0824829 ,  -6.94022094,  -7.34846923,   8.26702788]])

你可能感兴趣的:(Numpy,python,机器学习,算法,numpy,数据分析)