详解numpy的argmax的具体使用


Posted in Python onMay 27, 2019

从最简单的例子出发

假定现在有一个数组a = [3, 1, 2, 4, 6, 1]现在要算数组a中最大数的索引是多少.这个问题对于刚学编程的同学就能解决.最直接的思路,先假定第0个数最大,然后拿这个和后面的数比,找到大的就更新索引.代码如下

a = [3, 1, 2, 4, 6, 1]
maxindex = 0
i = 0
for tmp in a:
  if tmp > a[maxindex]:
    maxindex = i
  i += 1
print(maxindex)

这个问题虽然简单.但是可以帮助我们理解argmax.

解释

还是从一维数组出发.看下面的例子.

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

argmax返回的是最大数的索引.argmax有一个参数axis,默认是0,表示第几维的最大值.看二维的情况.

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

为了描述方便,a就表示这个二维数组.np.argmax(a, axis=0)的含义是a[0][j],a[1][j],a[2][j](j=0,1,2,3)中最大值的索引.从a[0][j]开始,最大值索引最初为(0,0,0,0),拿a[0][j]和a[1][j]作比较,9大于1,6大于5,8大于2,所以最大值索引由(0,0,0,0)更新为(1,1,0,1),再和a[2][j]作比较,7大于6,9大于5所以更新为(1,2,2,1).再分析下面的输出.

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

np.argmax(a, axis=1)的含义是a[i][0],a[i][1],a[i][2],a[i][3](i=0,1,2)中最大值的索引.从a[i][0]开始,a[i][0]对应的索引为(0,0,0),先假定它就是最大值索引(思路和上节简单例子完全一致)拿a[i][0]和a[i][1]作比较,5大于1,7大于3所以最大值索引由(0,0,0)更新为(1,0,1),再和a[i][2]作比较,9大于7,更新为(1,0,2),再和a[i][3]作比较,不用更新,最终值为(1,0,2)
再看三维的情况.

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

       [
         [-1, 5, -5, 2],
         [9, 6, 2, 8],
         [3, 7, 9, 1]
       ]
      ])
print(np.argmax(a, axis=0))

np.argmax(a, axis=0)的含义是a[0][j][k],a[1][j][k] (j=0,1,2,k=0,1,2,3)中最大值的索引.从a[0][j][k]开始,a[0][j][k]对应的索引为((0,0,0,0),(0,0,0,0),(0,0,0,0)),拿a[0][j][k]和a[1][j][k]对应项作比较6大于-6,3大于-3,9大于-9,所以更新这几个位置的索引,将((0,0,0,0),(0,0,0,0),(0,0,0,0))更新为((0,0,0,0),(0,1,0,0),(1,0,1,0)). 再看axis=1的情况.

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

       [
         [-1, 5, -5, 2],
         [9, 6, 2, 8],
         [3, 7, 9, 1]
       ]
      ])
print(np.argmax(a, axis=1))

np.argmax(a, axis=1)的含义是a[i][0][k],a[i][1][k] (i=0,1,k=0,1,2,3)中最大值的索引.从a[i][0][k]开始,a[i][0][k]对应的索引为((0,0,0,0),(0,0,0,0)),拿a[i][0][k]和a[i][1][k]对应项作比较,9大于1,8大于2,9大于-1,6大于5,2大于-5,8大于2,所以更新这几个位置的索引,将((0,0,0,0),(0,0,0,0))更新为((1,0,0,1),(1,1,1,1)),现在最大值对应的数组为((9,5,5,8),(9,6,2,8)).再拿((9,5,5,8),(9,6,2,8))和a[i][2][k]对应项从比较,7大于5,7大于6,9大于2.更新这几个位置的索引.将((1,0,0,1),(1,1,1,1))更新为((1,2,0,1),(1,2,2,1)).axis=2的情况也是类似的.

参考资料

numpy官方文档

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python计算已经过去多少个周末的方法
Jul 25 Python
Python实现修改文件内容的方法分析
Mar 25 Python
Python判断两个list是否是父子集关系的实例
May 04 Python
使用numba对Python运算加速的方法
Oct 15 Python
对python中字典keys,values,items的使用详解
Feb 03 Python
python字符串分割及字符串的一些常规方法
Jul 24 Python
Flask框架学习笔记之表单基础介绍与表单提交方式
Aug 12 Python
Pandas DataFrame中的tuple元素遍历的实现
Oct 23 Python
对tensorflow 中tile函数的使用详解
Feb 07 Python
Python正则表达式如何匹配中文
May 27 Python
详解Selenium-webdriver绕开反爬虫机制的4种方法
Oct 28 Python
python之np.argmax()及对axis=0或者1的理解
Jun 02 Python
numpy.random模块用法总结
May 27 #Python
Django框架自定义session处理操作示例
May 27 #Python
numpy concatenate数组拼接方法示例介绍
May 27 #Python
详解Numpy中的数组拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)
May 27 #Python
python安装numpy和pandas的方法步骤
May 27 #Python
numpy库与pandas库axis=0,axis= 1轴的用法详解
May 27 #Python
Python之NumPy(axis=0 与axis=1)区分详解
May 27 #Python
You might like
让PHP支持断点续传的源码
2010/05/16 PHP
php Imagick获取图片RGB颜色值
2014/07/28 PHP
微信公众平台消息接口校验与消息接口响应实例
2014/12/23 PHP
ThinkPHP实现的rsa非对称加密类示例
2018/05/29 PHP
了解jQuery技巧来提高你的代码
2010/01/08 Javascript
jQuery学习2 选择器的使用说明
2010/02/07 Javascript
js下获取div中的数据的原理分析
2010/04/07 Javascript
jQuery实现鼠标移到元素上动态提示消息框效果
2013/10/20 Javascript
jquery对单选框,多选框,文本框等常见操作小结
2014/01/08 Javascript
jquery单行文字向上滚动效果的实现代码
2014/09/05 Javascript
JavaScript中检查对象property的存在性方法介绍
2014/12/30 Javascript
jQuery实现延迟跳转的方法
2015/06/05 Javascript
基于jQuery实现的QQ表情插件
2015/08/25 Javascript
Nodejs中session的简单使用及通过session实现身份验证的方法
2016/02/04 NodeJs
jQuery实现带延时功能的水平多级菜单效果【附demo源码下载】
2016/09/21 Javascript
真正好用的js验证上传文件大小的简单方法
2016/10/27 Javascript
JavaScript中运算符规则和隐式类型转换示例详解
2017/09/06 Javascript
vue 实现把路由单独分离出来
2020/08/13 Javascript
jQuery实现电梯导航模块
2020/12/22 jQuery
Python编写一个闹钟功能
2017/07/11 Python
Python实现感知机(PLA)算法
2017/12/20 Python
python 实现判断ip连通性的方法总结
2018/04/22 Python
python3.4.3下逐行读入txt文本并去重的方法
2018/04/29 Python
解决nohup重定向python输出到文件不成功的问题
2018/05/11 Python
Python日志模块logging基本用法分析
2018/08/23 Python
Python读写csv文件流程及异常解决
2020/10/20 Python
Made in Design英国:设计家具、照明、家庭装饰和花园家具
2019/09/24 全球购物
Linux管理员面试经常问道的相关命令
2013/04/29 面试题
电台实习生求职信
2014/02/25 职场文书
电子专业毕业生自荐信
2014/05/25 职场文书
2014年业务工作总结
2014/11/17 职场文书
抢劫罪辩护词
2015/05/21 职场文书
大学入学感言
2015/08/01 职场文书
学校运动会开幕词
2016/03/03 职场文书
MySQL Server层四个日志的实现
2022/03/31 MySQL
python数字图像处理:图像简单滤波
2022/06/28 Python