详解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接收多播数据的代码
Mar 01 Python
HTML中使用python屏蔽一些基本功能的方法
Jul 07 Python
基于Python中capitalize()与title()的区别详解
Dec 09 Python
快速排序的四种python实现(推荐)
Apr 03 Python
django多对多表的创建,级联删除及手动创建第三张表
Jul 25 Python
PyCharm中代码字体大小调整方法
Jul 29 Python
Python要求O(n)复杂度求无序列表中第K的大元素实例
Apr 02 Python
解决keras模型保存h5文件提示无此目录问题
Jul 01 Python
python实现自动打卡的示例代码
Oct 10 Python
Python实现简单的猜单词小游戏
Oct 28 Python
Python list去重且保持原顺序不变的方法
Apr 03 Python
Python机器学习之基础概述
May 19 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中用正则表达式清除字符串的空白
2011/01/17 PHP
取得单条网站评论以数组形式进行输出
2014/07/28 PHP
php跨站攻击实例分析
2014/10/28 PHP
js动画(animate)简单引擎代码示例
2012/12/04 Javascript
js模拟滚动条(横向竖向)
2013/02/22 Javascript
使用JavaScript修改浏览器URL地址栏的实现代码
2013/10/21 Javascript
Jquery中国地图热点效果-鼠标经过弹出提示层信息的简单实例
2014/02/12 Javascript
Javascript aop(面向切面编程)之around(环绕)分析
2015/05/01 Javascript
JavaScript中getUTCSeconds()方法的使用详解
2015/06/11 Javascript
JavaScript数组的定义及数字操作技巧
2016/06/06 Javascript
AngularJS ng-template寄宿方式用法分析
2016/11/07 Javascript
Bootstrap的class样式小结
2016/12/01 Javascript
AngularJS中的按需加载ocLazyLoad示例
2017/01/11 Javascript
ajax与json 获取数据并在前台使用简单实例
2017/01/19 Javascript
巧用canvas
2017/01/21 Javascript
vue中页面跳转拦截器的实现方法
2017/08/23 Javascript
vue中实现高德定位功能
2019/12/03 Javascript
微信小程序 this.triggerEvent()的具体使用
2019/12/10 Javascript
JS实现滑动拼图验证功能完整示例
2020/03/29 Javascript
javascript实现时钟动画
2020/12/03 Javascript
react-native 实现购物车滑动删除效果的示例代码
2021/01/15 Javascript
[00:32]DOTA2上海特级锦标赛 COL战队宣传片
2016/03/04 DOTA
python局部赋值的规则
2013/03/07 Python
将Python代码嵌入C++程序进行编写的实例
2015/07/31 Python
打包发布Python模块的方法详解
2016/09/18 Python
Python使用正则表达式实现文本替换的方法
2017/04/18 Python
python3.6 如何将list存入txt后再读出list的方法
2019/07/02 Python
python 常见的排序算法实现汇总
2020/08/21 Python
python如何调用百度识图api
2020/09/29 Python
纯CSS3制作漂亮带动画效果的主机价格表
2015/04/25 HTML / CSS
CSS3 :not()选择器实现最后一行li去除某种css样式
2016/10/19 HTML / CSS
Snapfish英国:在线照片打印和个性化照片礼品
2017/01/13 全球购物
经济系大学生求职信
2013/10/01 职场文书
眼镜促销方案
2014/03/15 职场文书
《郑和远航》教学反思
2014/04/16 职场文书
教师工作能力自我评价
2015/03/04 职场文书