Python中的np.argmin()和np.argmax()函數(shù)用法
Python np.argmin()和np.argmax()函數(shù)
按照axis的要求返回最小的數(shù)/最大的數(shù)的下標(biāo)
numpy.argmin(a, axis=None, out=None) numpy.argmax(a, axis=None, out=None)
a
:傳入一個(gè)數(shù)組,
axis
:默認(rèn)將輸入數(shù)組展平,否則,按照axis方向
out
:可選
import numpy as np a = np.arange(6).reshape(2, 3) a array([[0, 1, 2], [3, 4, 5]]) # 此時(shí)自動(dòng)展平了 np.argmin(a) 0 np.argmax(a) 5 # 在axis方向上找最小的值并返回坐標(biāo) np.argmin(a, axis=1) array([0, 0], dtype=int64) # 在axis方向上找最大的值并返回坐標(biāo) np.argmax(a, axis=1) array([2, 2], dtype=int64)
當(dāng)有多個(gè)最小值的時(shí)候只顯示第一個(gè)
a = np.arange(6) a[4] = 0 a array([0, 1, 2, 3, 0, 5]) np.argmin(a) 0
Python基礎(chǔ)——min/max與np.argmin/np.argmax
這里應(yīng)該是拿min/max(更適合處理可迭代對(duì)象,可選的參數(shù)是key=func)與np.min/np.max(可適合處理numpy.ndarray對(duì)象,可選的參數(shù)是axis=0或者1)作比較,只不過np.argmin/np.argmax的用法與np.min/np.max相似,這里就不進(jìn)行更正了。
首先min/max與np.argmin/np.argmax函數(shù)的功能不同
前者返回值,后者返回最值所在的索引(下標(biāo))
處理的對(duì)象不同
前者跟適合處理list等可迭代對(duì)象,而后者自然是numpy里的核心數(shù)據(jù)結(jié)構(gòu)ndarray(多維數(shù)組)
min/max是python內(nèi)置的函數(shù)
np.argmin/np.argmax是numpy庫中的成員函數(shù)
接口不同
min(iterable, key=func)->value np.argmin(a, axis=None)
常見的接口如上所示,前者除了一個(gè)可迭代對(duì)象外,還接收一個(gè)函數(shù)對(duì)象(keyword argument),用于指定比較的對(duì)象(也即最值比較的內(nèi)容是,將迭代對(duì)象中的元素逐個(gè)賦予func函數(shù)對(duì)象所得到返回值),可見func只可接受一個(gè)參數(shù),如min(dict, key=dict.get)。
而np.argmax更多的是進(jìn)行軸上的比較(axis=0,也是默認(rèn)的軸,是列向)
>>> l = ['1', '100', '111', '2'] >>> max(l) '2' # 下面我們指定比較內(nèi)容 >>> 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(這里不對(duì)tuple和list作區(qū)分):
>>> ll = [(1, 'a'), (3, 'c'), (4, 'e'), (-1, 'z')] >>> max(ll)
例如根據(jù)列表中的每一個(gè)元素(tuple或者list類型)的第二位進(jìn)行求最大值:
>>> 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
默認(rèn)情況下,max首先進(jìn)行比較的是items(k,v)中的第一個(gè)內(nèi)容(也即是k),相等的情況下,再進(jìn)行v的比較。
稍作修改,我們便可實(shí)現(xiàn)對(duì)v的比較:
>>> max(ll, key=lambda x: x[1]) (-1, 'z')
有時(shí)可能最值所在的下標(biāo)對(duì)我們更重要,我們據(jù)此下標(biāo)索引更為豐富的信息。如何不顯式轉(zhuǎn)化為numpy.ndarray類型(有時(shí)也無法轉(zhuǎn)換,當(dāng)異質(zhì)容器時(shí))不通過np.argmax這樣的函數(shù)獲得最值(任何值都可以)所在的下標(biāo)呢?使用list(tuple)的index()成員函數(shù)。
>>> ll = [(1, 'a'), (3, 'c'), (4, 'e'), (-1, 'z')] >>> val = max(ll, lambda x: x[1]) >>> ll.index(val) 3
根據(jù)以上用法,我們也可推測并實(shí)現(xiàn)一個(gè)精簡版的max函數(shù):
def max(items, key=lambda x: x): current = items[0] for item in items: if key(item) > key(current): current = item return current
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python實(shí)現(xiàn)基于標(biāo)記的分水嶺分割算法
分水嶺技術(shù)是一種眾所周知的分割算法,特別適用于提取圖片中的相鄰或重疊對(duì)象。本文將用Python實(shí)現(xiàn)基于標(biāo)記的分水嶺分割算法,感興趣的可以了解一下2022-07-07python環(huán)境功能強(qiáng)大的pip-audit安全漏洞掃描工具
這篇文章主要為大家介紹了python環(huán)境中功能強(qiáng)大的pip-audit安全漏洞掃描工具的功能介紹及安裝使用說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-02-02Python 字典一個(gè)鍵對(duì)應(yīng)多個(gè)值的方法
這篇文章主要介紹了Python 字典一個(gè)鍵對(duì)應(yīng)多個(gè)值的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Python實(shí)現(xiàn)FTP文件定時(shí)自動(dòng)下載的步驟
這篇文章主要介紹了Python實(shí)現(xiàn)FTP文件定時(shí)自動(dòng)下載的示例,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-12-12pandas.dataframe按行索引表達(dá)式選取方法
今天小編就為大家分享一篇pandas.dataframe按行索引表達(dá)式選取方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-10-10