详解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 19 Python
python常用知识梳理(必看篇)
Mar 23 Python
python3下使用cv2.imwrite存储带有中文路径图片的方法
May 10 Python
Python中的单行、多行、中文注释方法
Jul 19 Python
使用Python制作自动推送微信消息提醒的备忘录功能
Sep 06 Python
python装饰器常见使用方法分析
Jun 26 Python
用Pelican搭建一个极简静态博客系统过程解析
Aug 22 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
Aug 31 Python
Scrapy框架介绍之Puppeteer渲染的使用
Jun 19 Python
Python3如何使用tabulate打印数据
Sep 25 Python
python实现b站直播自动发送弹幕功能
Feb 20 Python
python脚本框架webpy的url映射详解
Nov 20 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
WHOIS类的修改版
2006/10/09 PHP
经典的PHPer为什么被认为是草根?
2007/04/02 PHP
PHP采集相关教程之一 CURL函数库
2010/02/15 PHP
zf框架的数据库追踪器使用示例
2014/03/13 PHP
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
2014/06/09 PHP
PHP递归复制、移动目录的自定义函数分享
2014/11/18 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
一次因composer错误使用引发的问题与解决
2019/03/06 PHP
PHP goto语句用法实例
2019/08/06 PHP
在laravel框架中实现封装公共方法全局调用
2019/10/14 PHP
Laravel实现批量更新多条数据
2020/04/06 PHP
用 JSON 处理缓存
2007/04/27 Javascript
JS 巧妙获取剪贴板数据 Excel数据的粘贴
2009/07/09 Javascript
JQUERY操作JSON实例代码
2010/02/09 Javascript
javascript scrollTop正解使用方法
2013/11/14 Javascript
js中用window.open()打开多个窗口的name问题
2014/03/13 Javascript
文本框倒叙输入让输入框的焦点始终在最开始的位置
2014/09/01 Javascript
浅析js预加载/延迟加载
2014/09/25 Javascript
浅析AngularJs HTTP响应拦截器
2015/12/28 Javascript
微信小程序 vidao实现视频播放和弹幕的功能
2016/11/02 Javascript
Angular2-primeNG文件上传模块FileUpload使用详解
2017/01/14 Javascript
Mongoose实现虚拟字段查询的方法详解
2017/08/15 Javascript
利用CDN加速react webpack打包后的文件详解
2018/02/22 Javascript
详解vue-cli3使用
2018/08/14 Javascript
微信小程序之几种常见的弹框提示信息实现详解
2019/07/11 Javascript
使用pycharm在本地开发并实时同步到服务器
2019/08/02 Python
Python实现捕获异常发生的文件和具体行数
2020/04/25 Python
英国最大的宠物食品和宠物用品网上零售商: Zooplus
2016/08/01 全球购物
怀俄明州飞钓:Platte River Fly Shop
2017/12/28 全球购物
SCDKey德国:全球领先的数字游戏市场
2019/04/09 全球购物
高中生自我评价个人范文
2013/11/09 职场文书
小学毕业感言150字
2014/02/05 职场文书
党支部承诺书范文
2014/03/28 职场文书
竞聘演讲稿开场白
2014/08/25 职场文书
2015年感恩节活动总结
2015/03/24 职场文书
MATLAB 全景图切割及盒图显示的实现步骤
2021/05/14 Python