深入理解numpy中argmax的具體使用
一、基本介紹
numpy中的argmax簡(jiǎn)而言之就是返回最大值的索引,當(dāng)使用np.argmax(axis),這里方向axis的指定往往讓人不理解。
簡(jiǎn)而言之:這里axis可以讓我們從行、列、或者是深度方向來(lái)看一個(gè)高維數(shù)組。
二、代碼實(shí)驗(yàn)
1、一維數(shù)組情況

簡(jiǎn)單一維情況,np.argmax()直接返回最大值的索引,不指定axis可以認(rèn)為是將數(shù)組拉平之后尋找最大值的索引
1.1、axis=0
當(dāng)我們指定axis=0時(shí),其實(shí)是在列中作比較,尋找最大的行的索引

當(dāng)然對(duì)于這個(gè)一維情況沒(méi)有什么影響。
1.2、axis=1

當(dāng)我們指定axis=1的時(shí)候報(bào)錯(cuò)了,這是因?yàn)槲覀兊腶是一維數(shù)組,沒(méi)有axis=1這個(gè)軸,可見(jiàn)當(dāng)我們使用np.argmax()時(shí)axis的指定不能超過(guò)所需要排序的數(shù)組
2、二維數(shù)組情況

不指定axis就是相當(dāng)于把二維數(shù)組拉平,直接選取最大值的索引
2.1、axis=0

指定axis=0就是比較列,返回行索引中的最大值

我們改寫(xiě)一個(gè)b中的元素,我們期望的結(jié)果是[2,2,1,2]

實(shí)際結(jié)果和我們期望相符合
2.2、axis=1

指定axis=0就是比較行,返回列索引中的最大值
3、三維數(shù)組情況
一個(gè)三維數(shù)組可以視作一張圖片,它的三個(gè)維度分別為(high, width, channels) 分別表示圖像的高、寬、通道數(shù)(深度)。常見(jiàn)的彩色圖像都有三個(gè)通道,我們以常見(jiàn)的RGB圖像為例構(gòu)建一個(gè)數(shù)組。

直接使用np.argmax(),就是之間將三維數(shù)組拉平,尋找最大值的索引
3.1、axis=0
單獨(dú)查看c的三個(gè)通道的數(shù)據(jù),如圖所示

對(duì)于三個(gè)通道取axis=0意味分別比較列返回行的最大值索引

我們期望的返回值應(yīng)該是[[1,1,1,],[1,1,1],[1,1,1]],實(shí)際的結(jié)果和我們的期望一致

3.2、axis=1

對(duì)于三個(gè)通道取axis=1意味分別比較行返回列的最大值索引
我們期望的結(jié)果是[[2, 2, 2],[2, 2, 2],[2, 2, 2],[2, 2, 2]],,實(shí)際的結(jié)果和我們的期望一致

3.3、axis=2
取axis=2意味著我們從圖像的深度方向(通道方向)來(lái)進(jìn)行比較,可以認(rèn)為三個(gè)數(shù)組的疊在一起的,分別對(duì)應(yīng)channel0,channel1,channel2而我們?nèi)∽畲笾档乃饕褪?strong>返回對(duì)應(yīng)pixel像素所在的通道索引。

c的channel2所有的像素值均大于其他兩個(gè)channel所有返回值應(yīng)該是[[2,2,2,],[2,2,2,],[2,2,2,],[2,2,2,]],實(shí)際結(jié)果和我的期望一致

3.4、axis=-1
axis=-1即是反過(guò)來(lái)看軸,對(duì)于三維情況axis=-1和axis=2一致

其他:
對(duì)于二維情況axis=-1和anxis=1一致
對(duì)于一維情況axis=0和anxis=-1一致
四、Reference
https://blog.csdn.net/weixin_39190382/article/details/105854567
https://www.cnblogs.com/zhouyang209117/p/6512302.html
PS:補(bǔ)充
1.對(duì)一個(gè)一維向量
import numpy as np a = np.array([3, 1, 2, 4, 6, 1]) b=np.argmax(a)#取出a中元素最大值所對(duì)應(yīng)的索引,此時(shí)最大值位6,其對(duì)應(yīng)的位置索引值為4,(索引值默認(rèn)從0開(kāi)始) print(b)#4
2.對(duì)2維向量(通常意義下的矩陣)a[][]
import numpy as np a = np.array([[1, 5, 5, 2], ? ? ? ? ? ? ? [9, 6, 2, 8], ? ? ? ? ? ? ? [3, 7, 9, 1]]) b=np.argmax(a, axis=0)#對(duì)二維矩陣來(lái)講a[0][1]會(huì)有兩個(gè)索引方向,第一個(gè)方向?yàn)閍[0],默認(rèn)按列方向搜索最大值 #a的第一列為1,9,3,最大值為9,所在位置為1, #a的第一列為5,6,7,最大值為7,所在位置為2, #此此類(lèi)推,因?yàn)閍有4列,所以得到的b為1行4列, print(b)#[1 2 2 1] ? c=np.argmax(a, axis=1)#現(xiàn)在按照a[0][1]中的a[1]方向,即行方向搜索最大值, #a的第一行為1,5,5,2,最大值為5(雖然有2個(gè)5,但取第一個(gè)5所在的位置),索引值為1, #a的第2行為9,6,2,8,最大值為9,索引值為0, #因?yàn)閍有3行,所以得到的c有3個(gè)值,即為1行3列 print(c)#[1 0 2]
3.對(duì)于三維矩陣a[0][1][2],情況最為復(fù)制,但在lstm中應(yīng)用最廣
import numpy as np a = np.array([ ? ? ? ? ? ? ? [ ? ? ? ? ? ? ? ? ? [1, 5, 5, 2], ? ? ? ? ? ? ? ? ? [9, -6, 2, 8], ? ? ? ? ? ? ? ? ? [-3, 7, -9, 1] ? ? ? ? ? ? ? ], ? ? ? ? ? ? ? ? [ ? ? ? ? ? ? ? ? ? [-1, 7, -5, 2], ? ? ? ? ? ? ? ? ? [9, 6, 2, 8], ? ? ? ? ? ? ? ? ? [3, 7, 9, 1] ? ? ? ? ? ? ? ], ? ? ? ? ? ? [ ? ? ? ? ? ? ? ? ? [21, 6, -5, 2], ? ? ? ? ? ? ? ? ? [9, 36, 2, 8], ? ? ? ? ? ? ? ? ? [3, 7, 79, 1] ? ? ? ? ? ? ? ] ? ? ? ? ? ? ]) b=np.argmax(a, axis=0)#對(duì)于三維度矩陣,a有三個(gè)方向a[0][1][2] #當(dāng)axis=0時(shí),是在a[0]方向上找最大值,即兩個(gè)矩陣做比較,具體 #(1)比較3個(gè)矩陣的第一行,即拿[1, 5, 5, 2], # ? ? ? ? ? ? ? ? ? ? ? ? [-1, 7, -5, 2], # ? ? ? ? ? ? ? ? ? ? ? ? [21, 6, -5, 2], #再比較每一列的最大值在那個(gè)矩陣中,可以看出第一列1,-2,21最大值為21,在第三個(gè)矩陣中,索引值為2 #第2列5,7,6最大值為7,在第2個(gè)矩陣中,索引值為1.....,最終得出比較結(jié)果[2 1 0 0] #再拿出三個(gè)矩陣的第二行,按照上述方法,得出比較結(jié)果 [0 2 0 0] #一共有三個(gè),所以最終得到的結(jié)果b就為3行4列矩陣 print(b) #[[0 0 0 0] ?#[0 1 0 0] ?#[1 0 1 0]] ? c=np.argmax(a, axis=1)#對(duì)于三維度矩陣,a有三個(gè)方向a[0][1][2] #當(dāng)axis=1時(shí),是在a[1]方向上找最大值,即在列方向比較,此時(shí)就是指在每個(gè)矩陣內(nèi)部的列方向上進(jìn)行比較 #(1)看第一個(gè)矩陣 ? ? ? ? ? ? ? ? ? # [1, 5, 5, 2], ? ? ? ? ? ? ? ? ? # [9, -6, 2, 8], ? ? ? ? ? ? ? ? ? # [-3, 7, -9, 1] #比較每一列的最大值,可以看出第一列1,9,-3最大值為9,,索引值為1 #第2列5,-6,7最大值為7,,索引值為2 # 因此對(duì)第一個(gè)矩陣,找出索引結(jié)果為[1,2,0,1] #再拿出2個(gè),按照上述方法,得出比較結(jié)果 [1 0 2 1] #一共有三個(gè),所以最終得到的結(jié)果b就為3行4列矩陣 print(c) #[[1 2 0 1] ?# [1 0 2 1] ?# [0 1 2 1]] ? d=np.argmax(a, axis=2)#對(duì)于三維度矩陣,a有三個(gè)方向a[0][1][2] #當(dāng)axis=2時(shí),是在a[2]方向上找最大值,即在行方向比較,此時(shí)就是指在每個(gè)矩陣內(nèi)部的行方向上進(jìn)行比較 #(1)看第一個(gè)矩陣 ? ? ? ? ? ? ? ? ? # [1, 5, 5, 2], ? ? ? ? ? ? ? ? ? # [9, -6, 2, 8], ? ? ? ? ? ? ? ? ? # [-3, 7, -9, 1] #尋找第一行的最大值,可以看出第一行[1, 5, 5, 2]最大值為5,,索引值為1 #第2行[9, -6, 2, 8],最大值為9,,索引值為0 # 因此對(duì)第一個(gè)矩陣,找出行最大索引結(jié)果為[1,0,1] #再拿出2個(gè)矩陣,按照上述方法,得出比較結(jié)果 [1 0 2 1] #一共有三個(gè),所以最終得到的結(jié)果d就為3行3列矩陣 print(d) # [[1 0 1] # ?[1 0 2] # ?[0 1 2]] ################################################################### #最后一種情況,指定矩陣a[0, -1, :],第一個(gè)數(shù)字0代表取出第一個(gè)矩陣(從前面可以看出a有3個(gè)矩陣)為 # [1, 5, 5, 2], # [9, -6, 2, 8], # [-3, 7, -9, 1] #第二個(gè)數(shù)字“-1”代表拿出倒數(shù)第一行,為 # [-3, 7, -9, 1] #這一行的最大索引值為1 ? # ,-1,代表最后一行 m=np.argmax(a[0, -1, :]) print(m)#1 ? #h,取a的第2個(gè)矩陣 # [-1, 7, -5, 2], # [9, 6, 2, 8], # [3, 7, 9, 1] #的第3行 # [3, 7, 9, 1] #的最大值為9,索引為2 h=np.argmax(a[1, 2, :]) print(h)#2 ? g=np.argmax(a[1,:, 2])#g,取出矩陣a,第2個(gè)矩陣的第3列為-5,2,9,最大值為9,索引為2 print(g)#2
到此這篇關(guān)于深入理解numpy中argmax的具體使用的文章就介紹到這了,更多相關(guān)numpy argmax內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python的pytest測(cè)試框架中fixture的使用詳解
這篇文章主要介紹了pytest中fixture的使用詳解,pytest是一個(gè)非常成熟的全功能的Python測(cè)試框架,能夠支持簡(jiǎn)單的單元測(cè)試和復(fù)雜的功能測(cè)試,還可以用來(lái)做selenium/appnium等自動(dòng)化測(cè)試、接口自動(dòng)化測(cè)試,需要的朋友可以參考下2023-07-07
python GUI庫(kù)圖形界面開(kāi)發(fā)之PyQt5下拉列表框控件QComboBox詳細(xì)使用方法與實(shí)例
這篇文章主要介紹了python GUI庫(kù)圖形界面開(kāi)發(fā)之PyQt5下拉列表框控件QComboBox詳細(xì)使用方法與實(shí)例,需要的朋友可以參考下2020-02-02
Python 限制線程的最大數(shù)量的方法(Semaphore)
今天小編就為大家分享一篇Python 限制線程的最大數(shù)量的方法(Semaphore),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-02-02

