详解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中for循环详解
Jan 17 Python
常见的在Python中实现单例模式的三种方法
Apr 08 Python
深入分析python数据挖掘 Json结构分析
Apr 21 Python
Python中将两个或多个list合成一个list的方法小结
May 12 Python
windows下python虚拟环境virtualenv安装和使用详解
Jul 16 Python
服务器端jupyter notebook映射到本地浏览器的操作
Apr 14 Python
基于python实现ROC曲线绘制广场解析
Jun 28 Python
Python rabbitMQ如何实现生产消费者模式
Aug 24 Python
使用Pytorch搭建模型的步骤
Nov 16 Python
python模拟点击玩游戏的实例讲解
Nov 26 Python
python基础之函数的定义和调用
Oct 24 Python
Python list列表删除元素的4种方法
Nov 01 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中路径问题的解决方案
2006/10/09 PHP
PHP判断搜索引擎蜘蛛并自动记忆到文件的代码
2012/02/04 PHP
PHP生成唯一的促销/优惠/折扣码(附源码)
2012/12/28 PHP
Laravel 添加多语言提示信息的方法
2019/09/29 PHP
extJs 下拉框联动实现代码
2010/04/09 Javascript
Javascript的一种模块模式
2010/09/08 Javascript
jQuery()方法的第二个参数详解
2015/04/29 Javascript
JavaScript获取并更改input标签name属性的方法
2015/07/02 Javascript
jquery密码强度校验
2015/12/02 Javascript
利用jQuery对无序列表排序的简单方法
2016/10/16 Javascript
Angular5.1新功能分享
2017/12/21 Javascript
12条写出高质量JS代码的方法
2018/01/07 Javascript
iSlider手机端图片滑动切换插件使用详解
2019/12/24 Javascript
Vue 图片压缩并上传至服务器功能
2020/01/15 Javascript
vue实现井字棋游戏
2020/09/29 Javascript
[01:50]《我与DAC》之玩家:iG夺冠时的那面红旗
2018/03/29 DOTA
python登录pop3邮件服务器接收邮件的方法
2015/04/30 Python
浅谈Python浅拷贝、深拷贝及引用机制
2016/12/15 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
2018/08/02 Python
Python获取当前脚本文件夹(Script)的绝对路径方法代码
2019/08/27 Python
Python 实现毫秒级淘宝抢购脚本的示例代码
2019/09/16 Python
Python 动态变量名定义与调用方法
2020/02/09 Python
PyCharm 在Windows的有用快捷键详解
2020/04/07 Python
python如何停止递归
2020/09/09 Python
Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
2020/12/07 Python
CSS3实现文本垂直排列的方法
2018/07/10 HTML / CSS
行政助理求职自荐信
2013/10/26 职场文书
自荐书4要点
2014/01/25 职场文书
幼儿园庆六一游园活动方案
2014/01/29 职场文书
《石榴》教学反思
2014/03/02 职场文书
2014年社区妇联工作总结
2014/12/02 职场文书
就业意向协议书
2015/01/29 职场文书
荆州古城导游词
2015/02/06 职场文书
出纳试用期自我评价
2015/03/10 职场文书
篮球比赛通讯稿
2015/07/18 职场文书
Python实现猜拳与猜数字游戏的方法详解
2022/04/06 Python