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

作者:JZJZY 时间:2021-09-10 16:00:51 

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

来源:https://hnuysylps.blog.csdn.net/article/details/103190408

标签:Python,np.argmin,np.argmax
0
投稿

猜你喜欢

  • Python算法中的时间复杂度问题

    2021-03-20 04:52:50
  • python中利用h5py模块读取h5文件中的主键方法

    2022-07-26 12:02:36
  • Python3简单实例计算同花的概率代码

    2023-07-20 16:23:03
  • 超级给力的JavaScript的React框架入门教程

    2024-06-05 09:55:04
  • MySQL修改innodb_data_file_path参数的一些注意事项

    2024-01-20 14:32:23
  • 浅谈MySQL中优化sql语句查询常用的30种方法

    2024-01-27 18:39:16
  • Python爬虫框架-scrapy的使用

    2022-09-11 20:12:28
  • MySQL通过自定义函数实现递归查询父级ID或者子级ID

    2024-01-19 03:30:07
  • 一文搞懂Python中subprocess模块的使用

    2023-12-05 16:35:05
  • python执行shell获取硬件参数写入mysql的方法

    2024-01-26 15:56:04
  • SQL Server中使用Linkserver连接Oracle的方法

    2024-01-23 07:35:00
  • perl 文件操作总结

    2023-07-07 07:17:38
  • Python爬虫代理池搭建的方法步骤

    2022-08-12 15:31:03
  • asp如何验证字符串是否包含有效字符?

    2009-11-08 19:02:00
  • VScode中集成Git命令详解

    2022-09-21 00:57:55
  • 简单介绍Python中的len()函数的使用

    2022-08-19 16:27:02
  • pandas数值计算与排序方法

    2022-11-10 07:25:02
  • python如何往列表头部和尾部添加元素

    2021-12-17 07:05:17
  • 通过作业调度建立SQL Server的自动备份

    2008-12-09 14:58:00
  • Go单元测试工具gomonkey的使用

    2024-05-22 10:19:21
  • asp之家 网络编程 m.aspxhome.com