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的小技巧之min,maxPython
- MAX or MIN of Indexed ColumnIndex
- min(), max()和indexIndex
- FBI? MAX? INDEX FULL SCAN (MIN/MAX)?Index
- Min-Max 容斥
- python奇技淫巧——max/min函式的用法Python函式
- min ? max ? 執行計劃?
- min ? max ? 執行計劃? (續)
- Oracle Max()/Min()類的效能優化Oracle優化
- Oracle Max()/Min()類的效能最佳化Oracle
- Min-Max 容斥學習筆記筆記
- Python中常用的幾個內建方法(max()/min()、filter()、map()、sorted、reduce())PythonFilter
- 詳解 Flink DataStream中min(),minBy(),max(),max()之間的區別AST
- CSS max-width和min-widthCSS
- CSS min-height和max-heightCSS
- reverse index 對於 MAX/MIN操作的影響Index
- Python基礎-類與物件Python物件
- Python基礎——@staticmethod與@classmethodPythonSSM
- 【優化】INDEX FULL SCAN (MIN/MAX)訪問路徑優化Index
- python SQL基礎與python互動PythonSQL
- python 基礎之模組與包Python
- 一SQL,每隔n個資料,取其中max,min值SQL
- 【最佳化】INDEX FULL SCAN (MIN/MAX)訪問路徑Index
- Python回顧與整理1:Python基礎Python
- Python基礎篇-Python基礎01Python
- CSS max-width/min-width設定元素尺寸CSS
- laravel mysql聚合函式使用方法(count,sum,max,min,avg)LaravelMySql函式
- ie6實現min-width/max-width
- CF2019 F. Max Plus Min Plus Size
- 機率期望進階 + Min-Max容斥 練習題
- 零基礎入門Python教程4節與基礎語法Python
- python基礎中的基礎Python
- Python3基礎18——類與物件Python物件
- python爬蟲基礎與http協議Python爬蟲HTTP協議
- Python基礎語法(七:類與物件)Python物件
- Python基礎12(模組與datetime模組)Python
- Python基礎筆記01-Python基礎Python筆記
- python基礎 - python名稱空間與作用域Python