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

说明:本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对你帮助,欢迎点赞讨论,共同进步~

你可能感兴趣的:(Numpy学习,python,深度学习,神经网络)