详解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实现的重启关机程序实例
Aug 21 Python
通过数据库向Django模型添加字段的示例
Jul 21 Python
对python模块中多个类的用法详解
Jan 10 Python
使用python模拟命令行终端的示例
Aug 13 Python
详解Django CAS 解决方案
Oct 30 Python
python随机数分布random均匀分布实例
Nov 27 Python
Python中bisect的使用方法
Dec 31 Python
Python中的 ansible 动态Inventory 脚本
Jan 19 Python
Python unittest单元测试框架及断言方法
Apr 15 Python
如何使用python-opencv批量生成带噪点噪线的数字验证码
Dec 21 Python
scrapy-splash简单使用详解
Feb 21 Python
Python使用random模块实现掷骰子游戏的示例代码
Apr 29 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数据库转移,access,sql server 转 MySQL 的图文教程
2007/09/02 PHP
PHP 5.3.1 安装包 VC9 VC6不同版本的区别是什么
2010/07/04 PHP
php笔记之:数据类型与常量的使用分析
2013/05/14 PHP
PHP中的多种加密技术及代码示例解析
2016/10/20 PHP
PHP获取类私有属性的3种方法
2020/09/10 PHP
在一个浏览器里呈现所有浏览器测试结果的前端测试工具的思路
2010/03/02 Javascript
input的focus方法使用
2010/03/13 Javascript
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之三
2012/01/03 Javascript
js操作table示例(个人心得)
2013/11/29 Javascript
用Jquery实现滚动新闻
2014/02/12 Javascript
js 中将多个逗号替换为一个逗号的代码
2014/06/07 Javascript
javascript实现复选框超过限制即弹出警告框的方法
2015/02/25 Javascript
JS全局变量和局部变量最新解析
2016/06/24 Javascript
基于BootStrap实现局部刷新分页实例代码
2016/08/08 Javascript
js实现手机发送验证码功能
2017/03/13 Javascript
JS正则替换去空格的方法
2017/03/24 Javascript
JavaScript实现前端分页控件
2017/04/19 Javascript
妙用Angularjs实现表格按指定列排序
2017/06/23 Javascript
微信小程序实现红包功能(后端PHP实现逻辑)
2018/07/11 Javascript
基于vue.js实现分页查询功能
2018/12/29 Javascript
JS实现图片幻灯片效果代码实例
2020/05/21 Javascript
vue如何搭建多页面多系统应用
2020/06/17 Javascript
分析python切片原理和方法
2017/12/19 Python
Python中的pathlib.Path为什么不继承str详解
2019/06/23 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
2019/09/20 Python
Python使用gluon/mxnet模块实现的mnist手写数字识别功能完整示例
2019/12/18 Python
numpy实现神经网络反向传播算法的步骤
2019/12/24 Python
HTML5实现多张图片上传功能
2016/03/11 HTML / CSS
JD Sports芬兰:英国领先的运动鞋和运动服饰零售商
2018/11/16 全球购物
简单的大学生自我鉴定
2014/02/18 职场文书
党员干部承诺书范文
2014/03/25 职场文书
前台接待岗位职责范本
2015/04/03 职场文书
写给媳妇的检讨书
2015/05/06 职场文书
八年级英语教学反思
2016/02/15 职场文书
详解MongoDB的条件查询和排序
2021/06/23 MongoDB
VMware虚拟机安装 Windows Server 2022的详细图文教程
2022/09/23 Servers