在日常数据分析和机器学习中,经常需要找到数组或矩阵中最大值的位置,这时,numpy 提供的 argmax() 函数就派上了用场。本文将系统地了解 argmax() 的作用、用法、常见陷阱以及在机器学习中的实际应用。
一、argmax 是什么?
argmax 全称是 “argument of the maximum”,直译为 “最大值对应的索引”。
它返回的是 最大值的索引,而不是最大值本身。
二、基本语法
numpy.argmax(a, axis=none)
| 参数 | 说明 |
|---|---|
a | 要计算的数组或矩阵 |
axis | 指定沿哪个轴查找最大值的位置,默认为 none(即将数组展平成一维) |
返回值:👉 一个整数(如果 axis=none)或一个包含索引的数组。
下边是其官方文档的介绍,官网链接numpy.argmax

三、基本示例
1️⃣ 一维数组
import numpy as np
arr = np.array([10, 25, 18, 36, 5])
index = np.argmax(arr)
print("最大值索引:", index)
print("最大值:", arr[index])
输出:
最大值索引: 3
最大值: 36
解释:最大值是 36,位于索引位置 3。
2️⃣ 二维数组
arr = np.array([
[1, 7, 3],
[4, 9, 2]
])
(1)不指定 axis
np.argmax(arr)
输出:
4
因为数组展平成 [1,7,3,4,9,2],最大值 9 在索引 4 位置。
(2)按行查找(axis=1)
np.argmax(arr, axis=1)
输出:
[1, 1]
解释:
- 第一行最大值 7 在索引 1
- 第二行最大值 9 也在索引 1
(3)按列查找(axis=0)
np.argmax(arr, axis=0)
输出:
[1, 1, 0]
解释:
- 第 1 列最大值在第 2 行(索引 1)
- 第 2 列最大值在第 2 行(索引 1)
- 第 3 列最大值在第 1 行(索引 0)
四、argmax 与 max 的区别
| 函数 | 返回内容 | 示例 |
|---|---|---|
| np.max() | 最大值 | np.max([1,3,2]) → 3 |
| np.argmax() | 最大值的索引 | np.argmax([1,3,2]) → 1 |
两者常搭配使用:
arr = np.array([2, 8, 5])
print("最大值:", np.max(arr))
print("最大值索引:", np.argmax(arr))
输出:
最大值: 8
最大值索引: 1
五、在机器学习中的应用
argmax() 在机器学习中非常常见,尤其在分类任务中用于获取预测类别标签。
🎯 示例:分类模型输出预测概率
假设模型输出如下概率矩阵:
import numpy as np
proba = np.array([
[0.1, 0.8, 0.1],
[0.6, 0.3, 0.1],
[0.2, 0.4, 0.4]
])
我们想得到每个样本的预测类别(即概率最大的那一类):
pred_labels = np.argmax(proba, axis=1) print(pred_labels)
输出:
[1, 0, 1]
解释:
- 第一行:类别 1 概率最大(0.8)
- 第二行:类别 0 概率最大(0.6)
- 第三行:类别 1 概率最大(0.4)
✅ 这正是深度学习模型(如 softmax 输出层)中最常见的做法。
六、常见坑点总结
| 问题 | 错误示例 | 正确做法 |
|---|---|---|
| 没有指定 axis 导致结果不符合预期 | np.argmax(matrix) | 指定 axis=1 或 axis=0 |
| 想取最大值却用 argmax | np.argmax(x) | 改为 np.max(x) |
| 想得到二维坐标但忘了用 np.unravel_index() | 直接打印索引 | 使用 np.unravel_index() 转换 |
七、总结对比表
| 功能 | 函数 | 返回内容 | 常见用途 |
|---|---|---|---|
| 取最大值 | np.max() | 最大值 | 查看数值本身 |
| 取最大值索引 | np.argmax() | 最大值位置 | 分类预测、矩阵分析 |
| 获取二维索引 | np.unravel_index() | 行列坐标 | 多维数组索引转换 |
到此这篇关于numpy argmax()函数详解的文章就介绍到这了,更多相关numpy argmax()内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论