关于Eigen库张量存在重复值时argmax/argmin函数返回行为的咨询
关于Eigen库张量存在重复值时argmax/argmin函数返回行为的咨询
嘿,这个问题问得很务实!我刚好对Eigen Tensor模块的这个行为比较熟悉,给你梳理清楚:
首先明确结论:当张量中存在多个相同的最大值时,argmax()函数会稳定返回第一个出现的最大值的索引,这个行为是确定的,不会因为不同环境或Eigen官方标准发行版的版本差异而变化。
拿你的例子来说,张量tensorA是{2.02, -4.2, 2.2, 2.2},最大值是2.2,第一个出现在索引2(Eigen的张量索引是从0开始计数的),所以调用tensorA.argmax()会返回2,而不是最后一个出现的索引3。
背后的逻辑很直白:Eigen的argmax()实现是从张量的起始位置开始遍历,初始时把第一个元素设为当前最大值,对应的索引设为初始索引。之后每遍历到一个元素,只有当它严格大于当前记录的最大值时,才会更新最大值和对应的索引;如果元素等于当前最大值,不会更新索引,这样就自然保留了第一个出现的最大值的位置。
顺带提一句,argmin()的行为也是完全一致的:遇到多个相同最小值时,返回第一个出现的最小值的索引。
备注:内容来源于stack exchange,提问作者Rachel
相关产品推荐
相关产品推荐

