Python中的np.argmin()和np.argmax()函数用法


Posted in Python onJune 02, 2021

Python np.argmin()和np.argmax()函数

按照axis的要求返回最小的数/最大的数的下标

numpy.argmin(a, axis=None, out=None)
numpy.argmax(a, axis=None, out=None)

a:传入一个数组,

axis:默认将输入数组展平,否则,按照axis方向

out:可选

import numpy as np
a = np.arange(6).reshape(2, 3)
a
array([[0, 1, 2],
       [3, 4, 5]])

# 此时自动展平了
np.argmin(a)
0
np.argmax(a)
5
# 在axis方向上找最小的值并返回坐标
np.argmin(a, axis=1)
array([0, 0], dtype=int64)

# 在axis方向上找最大的值并返回坐标
np.argmax(a, axis=1)
array([2, 2], dtype=int64)

当有多个最小值的时候只显示第一个

a = np.arange(6)
a[4] = 0
a

array([0, 1, 2, 3, 0, 5])

np.argmin(a)
0

Python基础——min/max与np.argmin/np.argmax

这里应该是拿min/max(更适合处理可迭代对象,可选的参数是key=func)与np.min/np.max(可适合处理numpy.ndarray对象,可选的参数是axis=0或者1)作比较,只不过np.argmin/np.argmax的用法与np.min/np.max相似,这里就不进行更正了。

首先min/max与np.argmin/np.argmax函数的功能不同

前者返回值,后者返回最值所在的索引(下标)

处理的对象不同

前者跟适合处理list等可迭代对象,而后者自然是numpy里的核心数据结构ndarray(多维数组)

min/max是python内置的函数

np.argmin/np.argmax是numpy库中的成员函数

接口不同

min(iterable, key=func)->value
np.argmin(a, axis=None)

常见的接口如上所示,前者除了一个可迭代对象外,还接收一个函数对象(keyword argument),用于指定比较的对象(也即最值比较的内容是,将迭代对象中的元素逐个赋予func函数对象所得到返回值),可见func只可接受一个参数,如min(dict, key=dict.get)。

而np.argmax更多的是进行轴上的比较(axis=0,也是默认的轴,是列向)

>>> l = ['1', '100', '111', '2']
>>> max(l)
'2'
# 下面我们指定比较内容
>>> max(l, key=lambda x: int(x)
'111'
>>> max(l, key=lambda x: len(x))
'100'
>>> max(l, key=lambda x: len(x) and int(x))
'111'

我们也可将min/max作用于list of lists(这里不对tuple和list作区分):

>>> ll = [(1, 'a'), (3, 'c'), (4, 'e'), (-1, 'z')]
>>> max(ll)

例如根据列表中的每一个元素(tuple或者list类型)的第二位进行求最大值:

>>> l = [(1, 2, 5), (2, 3, 5), (3, 2, 5), (4, 4, 5), (5, 1, 5)]
>>> max(l, key=lambda x: x[1])
(4, 4, 5)
>>> l.index(max(l, key=lambda x: x[1]))
3

默认情况下,max首先进行比较的是items(k,v)中的第一个内容(也即是k),相等的情况下,再进行v的比较。

稍作修改,我们便可实现对v的比较:

>>> max(ll, key=lambda x: x[1])
(-1, 'z')

有时可能最值所在的下标对我们更重要,我们据此下标索引更为丰富的信息。如何不显式转化为numpy.ndarray类型(有时也无法转换,当异质容器时)不通过np.argmax这样的函数获得最值(任何值都可以)所在的下标呢?使用list(tuple)的index()成员函数。

>>> ll = [(1, 'a'), (3, 'c'), (4, 'e'), (-1, 'z')]
>>> val = max(ll, lambda x: x[1])
>>> ll.index(val)
3

根据以上用法,我们也可推测并实现一个精简版的max函数:

def max(items, key=lambda x: x):
    current = items[0]
    for item in items:
        if key(item) > key(current):
            current = item
    return current

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python有证书的加密解密实现方法
Nov 19 Python
python实现查找excel里某一列重复数据并且剔除后打印的方法
May 26 Python
python中函数默认值使用注意点详解
Jun 01 Python
python实现八大排序算法(2)
Sep 14 Python
11个Python Pandas小技巧让你的工作更高效(附代码实例)
Apr 30 Python
解决django无法访问本地static文件(js,css,img)网页里js,cs都加载不了
Apr 07 Python
Python Pandas 对列/行进行选择,增加,删除操作
May 17 Python
python如何实时获取tcpdump输出
Sep 16 Python
python Selenium 库的使用技巧
Oct 16 Python
基于Python爬取股票数据过程详解
Oct 21 Python
Python的collections模块真的很好用
Mar 01 Python
浅谈Python数学建模之数据导入
Jun 23 Python
python之np.argmax()及对axis=0或者1的理解
Python import模块的缓存问题解决方案
Jun 02 #Python
Python3 类型标注支持操作
Jun 02 #Python
python 实现两个变量值进行交换的n种操作
聊聊Python中关于a=[[]]*3的反思
python内置进制转换函数的操作
Jun 02 #Python
Python 内置函数速查表一览
Jun 02 #Python
You might like
重量级动漫纷纷停播!唯独OVERLORD第四季正在英魂之刃继续更新
2020/05/06 日漫
php中二维数组排序问题方法详解
2015/08/28 PHP
PHP二进制与字符串之间的相互转换教程
2016/10/14 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
很全的显示阴历(农历)日期的js代码
2009/01/01 Javascript
js对象数组按属性快速排序
2011/01/31 Javascript
SOSO地图JS画出标注和中心点以html形式运行
2013/08/09 Javascript
JQuery获取与设置HTML元素的内容或文本的实现代码
2014/06/20 Javascript
jQuery 实现自动填充邮箱功能(带下拉提示)
2014/10/14 Javascript
原创jQuery弹出层插件分享
2015/04/02 Javascript
jQuery取消ajax请求的方法
2015/06/09 Javascript
JavaScript中用于四舍五入的Math.round()方法讲解
2015/06/15 Javascript
javascript中JSON对象与JSON字符串相互转换实例
2015/07/11 Javascript
一些实用性较高的js方法
2016/04/19 Javascript
使用JS批量选中功能实现更改数据库中的status状态值(批量展示)
2016/11/22 Javascript
使用BootStrap进行轮播图的制作
2017/01/06 Javascript
AngularJS实现select的ng-options功能示例
2017/07/12 Javascript
JavaScript利用fetch实现异步请求的方法实例
2017/07/26 Javascript
vue使用$emit时,父组件无法监听到子组件的事件实例
2018/02/26 Javascript
JavaScript实现短暂提示框功能
2018/04/04 Javascript
vue router 用户登陆功能的实例代码
2019/04/24 Javascript
使用vue-cli4.0快速搭建一个项目的方法步骤
2019/12/04 Javascript
[49:20]VG vs TNC Supermajor小组赛B组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
[02:12]Dota 2 推出全新英雄—— 电炎绝手
2019/08/23 DOTA
python实现C4.5决策树算法
2018/08/29 Python
python3 读取Excel表格中的数据
2018/10/16 Python
使用Python制作一个打字训练小工具
2019/10/01 Python
多重CSS背景动画实现方法示例
2014/04/04 HTML / CSS
文件中有一组整数,要求排序后输出到另一个文件中
2012/01/04 面试题
学用政策心得体会
2014/09/10 职场文书
迟到检讨书2000字(精选篇)
2014/10/07 职场文书
退休欢送会致辞
2015/07/31 职场文书
优秀志愿者感言
2015/08/01 职场文书
聘任书范文大全
2015/09/21 职场文书
Redis 常见使用场景
2021/08/30 Redis
SQL语法CONSTRAINT约束操作详情
2022/01/18 MySQL