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入门篇之列表和元组
Oct 17 Python
简单介绍Python的Tornado框架中的协程异步实现原理
Apr 23 Python
Python中文件I/O高效操作处理的技巧分享
Feb 04 Python
Python有序字典简单实现方法示例
Sep 28 Python
python多线程之事件Event的使用详解
Apr 27 Python
利用Python如何将数据写到CSV文件中
Jun 05 Python
Django中日期处理注意事项与自定义时间格式转换详解
Aug 06 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
Jul 03 Python
Python安装whl文件过程图解
Feb 18 Python
基于python实现模拟数据结构模型
Jun 12 Python
python实现粒子群算法
Oct 15 Python
Python实现Appium端口检测与释放的实现
Dec 31 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
PHP中实现接收多个name相同但Value不相同表单数据实例
2015/02/03 PHP
php array_slice 取出数组中的一段序列实例
2016/11/04 PHP
DOM和XMLHttpRequest对象的属性和方法整理
2012/01/04 Javascript
JQuery中Text方法用法实例分析
2015/05/18 Javascript
JS中字符串trim()使用示例
2015/05/26 Javascript
Nodejs中的this详解
2016/03/26 NodeJs
Javascript 引擎工作机制详解
2016/11/30 Javascript
Vue实现选择城市功能
2017/05/27 Javascript
JS中mouseup事件丢失的原因与解决办法
2017/06/14 Javascript
微信小程序 input表单与redio及下拉列表的使用实例
2017/09/20 Javascript
vue项目webpack中Npm传递参数配置不同域名接口
2018/06/15 Javascript
微信小程序之多列表的显示和隐藏功能【附源码】
2018/08/06 Javascript
javascript实现的时间格式加8小时功能示例
2019/06/13 Javascript
在layui中layer弹出层点击事件无效的解决方法
2019/09/05 Javascript
解决vue更新路由router-view复用组件内容不刷新的问题
2019/11/04 Javascript
[54:25]Ti4 循环赛第三日LGD vs MOUZ
2014/07/12 DOTA
[00:32]2018DOTA2亚洲邀请赛EG出场
2018/04/03 DOTA
python中logging包的使用总结
2018/02/28 Python
详解Django的model查询操作与查询性能优化
2018/10/16 Python
python将txt文件读入为np.array的方法
2018/10/30 Python
PyCharm2018 安装及破解方法实现步骤
2019/09/09 Python
安装PyInstaller失败问题解决
2019/12/14 Python
python实现五子棋程序
2020/04/24 Python
python代码实现将列表中重复元素之间的内容全部滤除
2020/05/22 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
2020/06/12 Python
Keras 数据增强ImageDataGenerator多输入多输出实例
2020/07/03 Python
HTML5实现简单图片上传所遇到的问题及解决办法
2016/01/20 HTML / CSS
SHEIN香港:价格实惠的女性时尚服装
2018/08/14 全球购物
亚马逊墨西哥站:Amazon.com.mx
2018/08/26 全球购物
下列程序在32位linux或unix中的结果是什么
2015/01/26 面试题
创业计划书如何编写
2014/02/06 职场文书
高中生旷课检讨书
2014/10/08 职场文书
2014年体检中心工作总结
2014/12/23 职场文书
办公室主任岗位职责
2015/01/31 职场文书
上甘岭观后感
2015/06/10 职场文书
旅游投诉信范文
2015/07/02 职场文书