Python中的np.argmin()和np.argmax()函数⽤法
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)
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)
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, )。
⽽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 = itempython中lambda怎么使用
return current
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。