详解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中list循环语句用法实例
Nov 10 Python
Python实现图像几何变换
Jul 06 Python
Python基于pygame模块播放MP3的方法示例
Sep 30 Python
使用Python+Splinter自动刷新抢12306火车票
Jan 03 Python
对Python中一维向量和一维向量转置相乘的方法详解
Aug 26 Python
Python算法的时间复杂度和空间复杂度(实例解析)
Nov 19 Python
python 实现多维数组(array)排序
Feb 28 Python
Python中Yield的基本用法
Oct 18 Python
如何查看python关键字
Jan 17 Python
pytorch Dataset,DataLoader产生自定义的训练数据案例
Mar 03 Python
一篇文章弄懂Python关键字、标识符和变量
Jul 15 Python
Python matplotlib 利用随机函数生成变化图形
Apr 26 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数据库表中取出随机数据的代码
2007/09/05 PHP
php获取地址栏信息的代码
2008/10/08 PHP
phplot生成图片类用法详解
2015/01/06 PHP
WordPress中创建用户角色的相关PHP函数使用详解
2015/12/25 PHP
js获取form的方法
2015/05/06 Javascript
Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready
2015/11/24 Javascript
Jquery EasyUI实现treegrid上显示checkbox并取选定值的方法
2016/04/29 Javascript
Jquery实现遮罩层的简单实例(就是弹出DIV周围都灰色不能操作)
2016/07/14 Javascript
如何检测JavaScript的各种类型
2016/07/30 Javascript
JS图片放大效果简单实现代码
2016/09/08 Javascript
jQuery Easyui datagrid连续发送两次请求问题
2016/12/13 Javascript
vue2.0开发入门笔记之.vue文件的生成和使用
2017/09/19 Javascript
jquery.picsign图片标注组件实例详解
2018/02/02 jQuery
js replace 全局替换的操作方法
2018/06/12 Javascript
详解JS函数stack size计算方法
2018/06/18 Javascript
JavaScript实现简单轮播图效果
2018/12/01 Javascript
JavaScript实现随机点名器实例详解
2019/05/07 Javascript
微信小程序基础教程之worker线程的使用方法
2019/07/15 Javascript
详解node登录接口之密码错误限制次数(含代码)
2019/10/25 Javascript
vue $set 给数据赋值的实例
2019/11/09 Javascript
如何手写一个简易的 Vuex
2020/10/10 Javascript
利用Tkinter(python3.6)实现一个简单计算器
2017/12/21 Python
python+matplotlib绘制简单的海豚(顶点和节点的操作)
2018/01/02 Python
python语言中with as的用法使用详解
2018/02/23 Python
python解析json串与正则匹配对比方法
2018/12/20 Python
python 删除字符串中连续多个空格并保留一个的方法
2018/12/22 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
2019/09/06 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
2019/09/20 Python
python numpy存取文件的方式
2020/04/01 Python
在Mac中PyCharm配置python Anaconda环境过程图解
2020/03/11 Python
利用HTML5 Canvas API绘制矩形的超级攻略
2016/03/21 HTML / CSS
2015驻村干部工作总结
2015/04/07 职场文书
健康证明
2015/06/19 职场文书
2016参观监狱警示教育活动心得体会
2016/01/15 职场文书
详解Javascript实践中的命令模式
2021/05/05 Javascript
用JS写一个发布订阅模式
2021/11/07 Javascript