详解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 相关文章推荐
在Docker上部署Python的Flask框架的教程
Apr 08 Python
Python的装饰器模式与面向切面编程详解
Jun 21 Python
python实现简单遗传算法
Mar 19 Python
Django时区详解
Jul 24 Python
python 图片二值化处理(处理后为纯黑白的图片)
Nov 01 Python
Python手绘可视化工具cutecharts使用实例
Dec 05 Python
利用pytorch实现对CIFAR-10数据集的分类
Jan 14 Python
python模式 工厂模式原理及实例详解
Feb 11 Python
如何使用python代码操作git代码
Feb 29 Python
Python3中小括号()、中括号[]、花括号{}的区别详解
Nov 15 Python
matplotlib bar()实现百分比堆积柱状图
Feb 24 Python
pytorch 带batch的tensor类型图像显示操作
May 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
关于mysql字符集设置了character_set_client=binary 在gbk情况下会出现表描述是乱码的情况
2013/01/06 PHP
如何使用FireFox插件FirePHP调试PHP
2013/07/23 PHP
PHP json_encode中文乱码问题的解决办法
2013/09/09 PHP
Laravel实现用户注册和登录
2015/01/23 PHP
HTML IMG标签 onload 内存溢出导致浏览器CPU占用过高
2021/03/09 Javascript
深入认识JavaScript中的函数
2007/01/22 Javascript
ExtJs扩展之GroupPropertyGrid代码
2010/03/05 Javascript
node.js中的fs.readdir方法使用说明
2014/12/17 Javascript
jquery实现表单输入时提示文字滑动向上效果
2015/08/10 Javascript
JavaScript模拟鼠标右键菜单效果
2020/12/08 Javascript
JS模仿腾讯图片站的图片翻页按钮效果完整实例
2016/06/21 Javascript
JQuery 进入页面默认给已赋值的复选框打钩
2017/03/23 jQuery
Require.JS中的几种define定义方式示例
2017/06/01 Javascript
基于Vue.js 2.0实现百度搜索框效果
2020/12/28 Javascript
vue中阻止click事件冒泡,防止触发另一个事件的方法
2018/02/08 Javascript
微信小程序获取位置展示地图并标注信息的实例代码
2019/09/01 Javascript
js实现带搜索功能的下拉框
2020/01/11 Javascript
微信小程序开发搜索功能实现(前端+后端+数据库)
2020/03/04 Javascript
[01:39:42]Fnatic vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
用Python实现web端用户登录和注册功能的教程
2015/04/30 Python
PyQt4实时显示文本内容GUI的示例
2019/06/14 Python
在OpenCV里实现条码区域识别的方法示例
2019/12/04 Python
Pytorch之finetune使用详解
2020/01/18 Python
python爬虫实现POST request payload形式的请求
2020/04/30 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
2020/05/26 Python
python如何查看安装了的模块
2020/06/23 Python
matplotlib 多个图像共用一个colorbar的实现示例
2020/09/10 Python
python 如何停止一个死循环的线程
2020/11/24 Python
pyx文件 生成pyd 文件用于 cython调用的实现
2021/03/04 Python
美国摩托车头盔、零件、齿轮及配件商店:Cycle Gear
2019/06/12 全球购物
介绍一下grep命令的使用
2012/06/28 面试题
AJAX都有哪些有点和缺点
2012/11/03 面试题
10的分与合教学反思
2014/04/30 职场文书
大学生学习新党章思想汇报
2014/10/25 职场文书
2015年公司保安年终工作总结
2015/05/14 职场文书
Python&Matlab实现樱花的绘制
2022/04/07 Python