np.argmax是否总是返回第一个最大值元素的对应索引?
np.argmax 是否会始终返回第一个最大值元素的索引? 答案是肯定的,这个行为是稳定可依赖的。
当数组沿指定轴存在多个数值相等的最大值时,np.argmax 会固定返回遍历过程中遇到的第一个最大值的索引,永远不会返回后续位置的等值最大值索引。你观察到的返回索引10、而非20/30的表现,就是这个规则的直接体现。
你没有在Python层的公开源码中找到对应实现逻辑非常正常:我们日常调用的np.argmax只是Python层封装的对外接口,实际遍历数组、比较数值、记录极值位置的核心逻辑是C层面实现的底层内置方法,不会在Python层源码中展示具体比较流程。
可以通过极简测试复现验证该规则:
import numpy as np # 测试数组最大值为3,分别位于索引1、4、6 test_arr = np.array([1, 3, 2, 0, 3, -7, 3]) print(np.argmax(test_arr)) # 所有版本NumPy运行上述代码都会固定输出1,即第一个最大值的索引
如果你的需求是获取所有最大值对应的索引,np.argmax无法满足,可以使用如下方案:
max_val = test_arr.max() all_max_pos = np.where(test_arr == max_val)[0] # 上述示例运行后all_max_pos输出为array([1, 4, 6]),包含所有最大值位置
补充:和np.argmax规则一致,np.argmin在遇到多个等值最小值时,同样会固定返回第一个出现的最小值索引,该行为从NumPy早期版本延续至今,跨版本表现一致,不存在随机返回其他等值极值位置的情况。
内容的提问来源于stack exchange,提问作者Carlos Pinzón
相关产品推荐
相关产品推荐

