Numpy常见方法(4)-数学和统计方法

本文详细介绍了numpy库中数学统计方法的使用,包括全元素操作和按轴操作。通过示例代码展示了如何使用sum、mean、std/var、min/max、argmin/argmax、cumsum和cumprod等函数,并通过argmax方法解释了轴操作的原理。文章还通过不同维度的数组实例解释了axis参数如何影响统计结果,帮助读者理解在神经网络等场景中的应用。
摘要由CSDN通过智能技术生成

说明:本blog基于python3版本, numpy 1.22.0


前言

numpy的数学统计方法主要有7个,分别是 sum(求和),mean(求均值),std/var(求标准差/方差),min/max(求最大/最小值),argmin/argmax(求最大/最小值的位置),cumsum(求累和),cumprod(求累积)

一、数学统计方法的全元素操作

数学统计方法的全元素操作,对函数无需加入参数axis;
比如我想求数组a的全元素最大值位置,代码如下

import numpy as np
a = np.array([[1,-2,-3],[4,-5,6]])

arg = np.argmax(a)
print(a)
print(arg)

结果如下,

[[ 1 -2 -3]
 [ 4 -5  6]]
5

由上可知,我们得到全元素最大位置是5;为什么是5而不是(1,2)呢?因为我们在使用numpy的数学统计方法时,**如果明确参数axis的值,就会默认对全元素操作,把整个ndarray视为一维数组,由里向外对所有元素按着一维数组的方式排列顺序;**回到本题,就是第5个位置最大。

当然,我们可以写出一个三维数组,进一步熟悉argmax方法的原理

import numpy as np
a = np.array([[[1,-2,-3],[4,-5,6]],[[7,8,-9],[10,11,-12]]])

arg = np.argmax(a)
print(a)
print(arg)

结果如下,

[[[  1  -2  -3]
  [  4  -5   6]]

 [[  7   8  -9]
  [ 10  11 -12]]]
10

nice! 第11个位置元素最大(因为python的位置是从0开始);argmax方法在神经网络中经常用到,请多加留意。

二、数学统计方法的按轴操作

数学统计方法的按轴操作,对函数需加入参数axis;axis对应轴按从外往里扒衣原则,该原则与ndarray的shape属性所遵照的原则相同

如果对numpy.shape属性感兴趣,请参考博文中的numpy基本属性部分

比如我想求数组a的最内层的最大值位置,代码如下

代码如下

import numpy as np
a = np.array([[[1,-2,-3],[4,-5,6]],[[7,8,-9],[10,11,-12]]])
arg = np.argmax(a, axis = 2)
print(a)
print(arg)

结果如下,

[[[  1  -2  -3]
  [  4  -5   6]]

 [[  7   8  -9]
  [ 10  11 -12]]]
[[0 2]
 [1 1]]

由上边结果,我们可以看到结果符合我们预期,具体解释如下:

[ 1 -2 -3]最大值为1,位置0
[ 4 -5 6]最大值为6,位置2
[ 7 8 -9]最大值为8,位置1
[ 10 11 -12]最大值为11,位置1
所以最终返回一个二维ndarray

[[0 2]
 [1 1]]

另外,我们还可求a中间层的最大值位置
代码如下

import numpy as np
a = np.array([[[1,-2,-3],[4,-5,6]],[[7,8,-9],[10,11,-12]]])
arg = np.argmax(a, axis = 1)
print(a)
print(arg)

结果如下

[[[  1  -2  -3]
  [  4  -5   6]]

 [[  7   8  -9]
  [ 10  11 -12]]]
[[1 0 1]
 [1 1 0]]

具体解释如下:

[ 1 4]最大值为4,位置1
[ -2 -5]最大值为-2,位置0
[ -3 6]最大值为6,位置1
[ 7 10]最大值为10,位置1
[8 11]最大值为11,位置1
[ -9 -12]最大值为-9,位置0

所以最终返回一个二维ndarray

[[1 0 1]
 [1 1 0]]

当然,我们还可以求最外层的最大值位置
代码如下

import numpy as np
a = np.array([[[1,-2,-3],[4,-5,6]],[[7,8,-9],[10,11,-12]]])
arg = np.argmax(a, axis = 0)
print(a)
print(arg)

结果如下

[[[  1  -2  -3]
  [  4  -5   6]]

 [[  7   8  -9]
  [ 10  11 -12]]]
[[1 1 0]
 [1 1 0]]

具体解释如下:

[ 1 7]最大值为7,位置1
[ -2 8]最大值为8,位置1
[ -3 -9]最大值为-3,位置0
[ 4 7]最大值为7,位置1
[-5 11]最大值为11,位置1
[ 6 -12]最大值为6,位置0

所以最终返回一个二维ndarray

[[1 1 0]
 [1 1 0]]

其实就是遵循一个原则,每层扒衣,元素比较


总结

写在最后,如果本blog对你帮助,欢迎点赞讨论,共同进步~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Efred.D

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值