1. 程式人生 > >Python基礎——min/max與np.argmin/np.argmax

Python基礎——min/max與np.argmin/np.argmax

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

                       

這裡應該是拿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)->valuenp.argmin(a, axis=None)
   
  • 1
  • 2

常見的介面如上所示,前者除了一個可迭代物件外,還接收一個函式物件(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'
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

我們也可將min/max作用於list of lists(這裡不對tuple和list作區分):

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

例如根據列表中的每一個元素(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
   
  • 1
  • 2
  • 3
  • 4
  • 5

預設情況下,max首先進行比較的是items(k,v)中的第一個內容(也即是k),相等的情況下,再進行v的比較。

稍作修改,我們便可實現對v的比較:

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

有時可能最值所在的下標對我們更重要,我們據此下標索引更為豐富的資訊。如何不顯式轉化為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
   
  • 1
  • 2
  • 3
  • 4

根據以上用法,我們也可推測並實現一個精簡版的max函式:

def max(items, key=lambda x: x):    current = items[0]    for item in items:        if key(item) > key(current):            current = item    return current
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述