详解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 urlopen 使用小示例
Sep 06 Python
Python中使用装饰器时需要注意的一些问题
May 11 Python
python字典的常用操作方法小结
May 16 Python
新手如何快速入门Python(菜鸟必看篇)
Jun 10 Python
把csv文件转化为数组及数组的切片方法
Jul 04 Python
Python+Pandas 获取数据库并加入DataFrame的实例
Jul 25 Python
Python3实现腾讯云OCR识别
Nov 27 Python
Django使用redis缓存服务器的实现代码示例
Apr 28 Python
对python 中class与变量的使用方法详解
Jun 26 Python
python 自动轨迹绘制的实例代码
Jul 05 Python
Python爬取破解无线网络wifi密码过程解析
Sep 17 Python
python numpy库linspace相同间隔采样的实现
Feb 25 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+Html+缓存
2006/11/25 PHP
分享一下贝贝成长进度的php代码
2012/09/14 PHP
php set_time_limit()函数的使用详解
2013/06/05 PHP
教你如何使用php session
2013/10/28 PHP
简单的php缓存类分享     php缓存机制
2014/01/22 PHP
PHP类的反射用法实例
2014/11/03 PHP
js函数使用技巧之 setTimeout(function(){},0)
2009/02/09 Javascript
基于jQuery替换table中的内容并显示进度条的代码
2011/08/02 Javascript
jQuery渐变发光导航菜单的实例代码
2013/03/27 Javascript
web网页按比例显示图片实现原理及js代码
2013/08/09 Javascript
JavaScript中获取样式的原生方法小结
2014/10/08 Javascript
Node.js中安全调用系统命令的方法(避免注入安全漏洞)
2014/12/05 Javascript
浅析创建javascript对象的方法
2016/05/13 Javascript
谈谈JavaScript中浏览器兼容问题的写法小议
2016/12/17 Javascript
js css自定义分页效果
2017/02/24 Javascript
使用vue.js编写蓝色拼图小游戏
2017/03/17 Javascript
JavaScript实现省市县三级级联特效
2017/05/16 Javascript
angular内置provider之$compileProvider详解
2017/09/27 Javascript
详解小程序毫秒级倒计时(适用于拼团秒杀功能)
2019/05/05 Javascript
python optparse模块使用实例
2015/04/09 Python
详解pandas数据合并与重塑(pd.concat篇)
2019/07/09 Python
浅析Python 引号、注释、字符串
2019/07/25 Python
Pytorch 实现自定义参数层的例子
2019/08/17 Python
Python autoescape标签用法解析
2020/01/17 Python
python实现小程序推送页面收录脚本
2020/04/20 Python
python能做哪些生活有趣的事情
2020/09/09 Python
复古斯堪的纳维亚儿童服装:Baby go Retro
2017/09/09 全球购物
经济信息系毕业生自荐信范文
2014/03/15 职场文书
教师自我鉴定范文
2014/03/20 职场文书
党员创先争优公开承诺书
2014/03/28 职场文书
少先队活动总结
2014/08/29 职场文书
创先争优活动承诺书
2014/08/30 职场文书
个人借款协议书范本
2014/11/17 职场文书
Vue提供的三种调试方式你知道吗
2022/01/18 Vue.js
灵能百分百第三季什么时候来?
2022/03/15 日漫
vue实现省市区联动 element-china-area-data插件
2022/04/22 Vue.js