我是靠谱客的博主 高高火车,最近开发中收集的这篇文章主要介绍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数字统计函数的全部内容,希望文章能够帮你解决Numpy数字统计函数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部