在讲解之前,先来一个该函数的参数说明:
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了,因为所谓的大元素只有一个元素了
好了,分析到这里了,二维和无穷多维的分析方法一样,其实核心思想都是使用投影的方法,最后给一张以投影方式的三维图,请自己分析了,如下图: