在講解之前,先來一個該函數的參數說明:
argmax(a, axis=None, out=None)
# a 表示array
# axis 表示指定的軸,默認是None,表示把array平鋪,
# out 默認爲None,如果指定,那麼返回的結果會插入其中
對於axis這個參數,對於大家來說是最困惑或者是最頭疼的事情,相信你在網上看到很多這樣的結論:axis=0時,返回列最大的索引值;axis=1時,返回行最大的索引值;你也許也看到過使用投影的方法,可以參考:https://www.cnblogs.com/psztswcbyy/p/9282530.html
不過這些結論我們經常混淆,如:行和列記反了,而使用投影的方式分析起來比較晦澀難懂
好了,今天帶大家使用數中括號[]的方式來快速得出答案
以三維數組進行講解,其它的維度分析過程差不多
array=[[[0,16],[14,5]],
[[16,6],[19,2]],
[[11,11],[5,7]]
]
1 當axis=0時,即tensorflow.argmax(array,axis=0),好了,我們現在開始數中括號,
可以寫成array=[大元素1,大元素2,大元素3],現在比較的是各大元素之間對應元素的值,然後得出索引,最終輸出的結果一定是類似這樣的結構如下: [大元素1]
現在講解各大對應元素索引的計算:
所以最終結果拼接起來爲 [大元素]=[[[1,0],[1,2]]],由於最外一層中括號在表示時顯得多此一舉了,所以最終結果爲:
[[1,0],[1,2]]
編寫程序驗證如下:
可能你看到這裏還是沒明白我想表達什麼,莫急,且聽我分析完axis=1和axis=2的情況再來對比就明白了
2 axis=1時,數第二個中括號,如下圖:
可以寫成:array=[[大元素1,大元素2],[大元素1,大元素2],[大元素1,大元素2]],最終輸出的結果一定是類似這樣的結構如下: [[大元素1,大元素2]]
現在講解各大對應元素索引的計算:
最終結果爲:[[1,0],[1,0],[0,0]]
程序驗證如下:
3 當axis=2時,數第三個中括號,如下圖:
可以寫成:
array=[[[大元素1,大元素2],[大元素1,大元素2]],
[[大元素1,大元素2],[大元素1,大元素2]],
[[大元素1,大元素2],[大元素1,大元素2]]
],
最終輸出的結果一定是類似這樣的結構如下:
[[[大元素1],[大元素1]],
[[大元素1],[大元素1]],
[[大元素1],[大元素1]]
]
其實所謂的大元素只剩下一個元素,所以中括號顯得多餘了,可以寫成:
[[大元素1,大元素1],
[大元素1,大元素1],
[大元素1,大元素1]
]
現在講解各大對應元素索引的計算:
程序驗證如下:
4 axis不可能等於3了,因爲所謂的大元素只有一個元素了
好了,分析到這裏了,二維和無窮多維的分析方法一樣,其實核心思想都是使用投影的方法,最後給一張以投影方式的三維圖,請自己分析了,如下圖: