numpy 和tensorflow中argmax(),argmin()函數使用講解

在使用argmax()函數時,好比在深度學習裏面計算acc常常要用到這個參數,這個參數返回的是沿軸axis最大值的索引值,對於,tensorflow和numpy用法是同樣的,此處我就用numpy來舉例說明。dom

argmax(a, axis=None, out=None)
# a 表示array # axis 表示指定的軸,默認是None,表示把array平鋪, # out 默認爲None,若是指定,那麼返回的結果會插入其中
  • 1
  • 2
  • 3
  • 4

對於axis默認爲None的狀況

首先咱們看axis=None,也就是默認的時候:函數

二維array狀況

a = np.array([[2,5,6],[7,6,1]]) print(np.argmax(a))
  • 1
  • 2

輸出結果爲3,由於a裏面7是最大的,若是沒有指定axis,默認就是None,至關於把array平鋪爲:[2,5,6,7,6,1],那麼結果就是3,由於索引3對應的值最大,再來看一下三維的狀況 
### 三維array的狀況學習

b = np.random.randint(20,size=[3,2,2]) print(b) [[[ 0 16] [14 5]] [[16 6] [19 2]] [[11 11] [ 5 7]]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

這個裏面,19最大,把它平鋪,19對應的索引就是6,那麼np.argmax(b)就是6,通過驗證輸出就是6ui

對於給定axis的狀況

若是給定axis,那麼返回的就是沿着給定軸的最大索引,所謂沿着,我以爲就是投影,就是沿着這個軸投影,每一根投影線上最大值的索引。lua

二維狀況分析

a = np.array([[2,5,6],[7,6,1]]) print(np.argmax(a,axis=1)) [2 0]
  • 1
  • 2
  • 3

此次,咱們給定axis=1,那麼按照咱們說的,就是沿着axis=1投影,看得出來,投影后咱們只有兩個值,由於[2,5,6]在一根投影線上,至關於就是我理解的一個投影線,由於這些值投影后重疊了,至關於只有一個值,因此[7,6,1]也是一個投影線,而後在這兩個投影線取最大值的索引,對於[2,5,6]來講,最大值索引就是2,[7,6,1]最大值索引就是0,因此結果爲[2,0] 
而後,咱們分析,當咱們設置axis=0的時候,也就是沿着axis=0,投影,那麼[2,7],[5,6],[6,1]分別在一個投影線上,因此結果爲[1,1,0],通過驗證確實是這樣的。spa

三維狀況分析

b = np.random.randint(20,size=[3,2,2]) print(b) [[[ 0 16] [14 5]] [[16 6] [19 2]] [[11 11] [ 5 7]]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

仍是用上面的array來講,看一下結果:code

print(np.argmax(b,axis=1)) [[1 0] [1 0] [0 0]]
  • 1
  • 2
  • 3
  • 4

一樣的分析,咱們指定了軸爲1,那麼也就是說咱們沿着axis=1軸投影,這是一個體,那麼咱們投影線至關於有3*2條,其實在同一根投影線上是axis=0和axis=2的一個組合,好比axis=1中第一個上的和axis=2的第一個上的組合,也就是b[0,:,0],b[0,:,1],b[2,:,0],b[2,:,1],b[3,:,0],b[3,:,1]這六條線的索引對應的最大值,咱們看他們分別爲[ 0 14],[16 5],[16 19],[6 2],[11 5],[11 7],那麼結果就是[[1,0],[1,0],[0,0]]。 
因此其實和二維是同樣的,所謂投影線,其實能夠這樣表示,咱們去axis=0,那麼咱們遍歷其餘維度的大小,好比 arr[:,0,0],arr[:,0,1],也就是沿着那個軸,那麼軸取所有值,而後再在投影線上找最大值對應索引。索引

總結

tensorflow裏面的是同樣的用法,同時argmin()用法相同,只是他是求最小值的索引。深度學習

相關文章
相關標籤/搜索