NumPy argmax()函数详解
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">一、argmax 是什么?</a></li><li><a href="#_label1">二、基本语法</a></li><li><a href="#_label2">三、基本示例</a></li><ul class="second_class_ul"><li><a href="#_lab2_2_0">1️⃣ 一维数组</a></li><li><a href="#_lab2_2_1">2️⃣ 二维数组</a></li><ul class="third_class_ul"><li><a href="#_label3_2_1_0">(1)不指定 axis</a></li><li><a href="#_label3_2_1_1">(2)按行查找(axis=1)</a></li><li><a href="#_label3_2_1_2">(3)按列查找(axis=0)</a></li></ul></ul><li><a href="#_label3">四、argmax 与 max 的区别</a></li><ul class="second_class_ul"></ul><li><a href="#_label4">五、在机器学习中的应用</a></li><ul class="second_class_ul"><li><a href="#_lab2_4_2">🎯 示例:分类模型输出预测概率</a></li><ul class="third_class_ul"></ul></ul><li><a href="#_label5">六、常见坑点总结</a></li><ul class="second_class_ul"></ul><li><a href="#_label6">七、总结对比表</a></li><ul class="second_class_ul"></ul></ul></div><p>在日常数据分析和机器学习中,经常需要找到数组或矩阵中<strong>最大值的位置</strong>,这时,<code>NumPy</code> 提供的 <code>argmax()</code> 函数就派上了用场。本文将系统地了解 <code>argmax()</code> 的作用、用法、常见陷阱以及在机器学习中的实际应用。</p><p class="maodian"><a name="_label0"></a></p><h2>一、argmax 是什么?</h2>
<p><code>argmax</code> 全称是 <strong>“argument of the maximum”</strong>,直译为 “最大值对应的索引”。</p>
<blockquote><p>它返回的是 <strong>最大值的索引</strong>,而不是最大值本身。</p></blockquote>
<p class="maodian"><a name="_label1"></a></p><h2>二、基本语法</h2>
<div class="jb51code"><pre class="brush:py;">numpy.argmax(a, axis=None)
</pre></div>
<table><thead><tr><th>参数</th><th>说明</th></tr></thead><tbody><tr><td><code>a</code></td><td>要计算的数组或矩阵</td></tr><tr><td><code>axis</code></td><td>指定沿哪个轴查找最大值的位置,默认为 <code>None</code>(即将数组展平成一维)</td></tr></tbody></table>
<p>返回值:👉 一个整数(如果 <code>axis=None</code>)或一个包含索引的数组。</p>
<p>下边是其官方文档的介绍,官网链接<a href="https://numpy.org/doc/stable/reference/generated/numpy.argmax.html" rel="external nofollow" target="_blank">numpy.argmax</a></p>
<p style="text-align:center"><img alt="" height="912" src="https://img.jbzj.com/file_images/article/202601/2026010809143684.jpg" width="963" /></p>
<p class="maodian"><a name="_label2"></a></p><h2>三、基本示例</h2>
<p class="maodian"><a name="_lab2_2_0"></a></p><h3>1️⃣ 一维数组</h3>
<div class="jb51code"><pre class="brush:py;">import numpy as np
arr = np.array()
index = np.argmax(arr)
print("最大值索引:", index)
print("最大值:", arr)
</pre></div>
<p>输出:</p>
<blockquote><p>最大值索引: 3<br />最大值: 36</p></blockquote>
<p>解释:最大值是 36,位于索引位置 3。</p>
<p class="maodian"><a name="_lab2_2_1"></a></p><h3>2️⃣ 二维数组</h3>
<div class="jb51code"><pre class="brush:py;">arr = np.array([
,
])
</pre></div>
<p class="maodian"><a name="_label3_2_1_0"></a></p><h4>(1)不指定 axis</h4>
<div class="jb51code"><pre class="brush:py;">np.argmax(arr)
</pre></div>
<p>输出:</p>
<blockquote><p>4</p></blockquote>
<blockquote><p>因为数组展平成 ,最大值 9 在索引 4 位置。</p></blockquote>
<p class="maodian"><a name="_label3_2_1_1"></a></p><h4>(2)按行查找(axis=1)</h4>
<div class="jb51code"><pre class="brush:py;">np.argmax(arr, axis=1)
</pre></div>
<p>输出:</p>
<blockquote><p></p></blockquote>
<p>解释:</p>
<ul><li>第一行最大值 7 在索引 1</li><li>第二行最大值 9 也在索引 1</li></ul>
<p class="maodian"><a name="_label3_2_1_2"></a></p><h4>(3)按列查找(axis=0)</h4>
<div class="jb51code"><pre class="brush:py;">np.argmax(arr, axis=0)
</pre></div>
<p>输出:</p>
<blockquote><p></p></blockquote>
<p>解释:</p>
<ul><li>第 1 列最大值在第 2 行(索引 1)</li><li>第 2 列最大值在第 2 行(索引 1)</li><li>第 3 列最大值在第 1 行(索引 0)</li></ul>
<p class="maodian"><a name="_label3"></a></p><h2>四、argmax 与 max 的区别</h2>
<table><thead><tr><th>函数</th><th>返回内容</th><th>示例</th></tr></thead><tbody><tr><td>np.max()</td><td>最大值</td><td>np.max() → 3</td></tr><tr><td>np.argmax()</td><td>最大值的索引</td><td>np.argmax() → 1</td></tr></tbody></table>
<p>两者常搭配使用:</p>
<div class="jb51code"><pre class="brush:py;">arr = np.array()
print("最大值:", np.max(arr))
print("最大值索引:", np.argmax(arr))
</pre></div>
<p>输出:</p>
<blockquote><p>最大值: 8<br />最大值索引: 1</p></blockquote>
<p class="maodian"><a name="_label4"></a></p><h2>五、在机器学习中的应用</h2>
<p>argmax() 在机器学习中非常常见,尤其在分类任务中用于<strong>获取预测类别标签</strong>。</p>
<p class="maodian"><a name="_lab2_4_2"></a></p><h3>🎯 示例:分类模型输出预测概率</h3>
<p>假设模型输出如下概率矩阵:</p>
<div class="jb51code"><pre class="brush:py;">import numpy as np
proba = np.array([
,
,
])
</pre></div>
<p>我们想得到每个样本的预测类别(即概率最大的那一类):</p>
<div class="jb51code"><pre class="brush:py;">pred_labels = np.argmax(proba, axis=1)
print(pred_labels)
</pre></div>
<p>输出:</p>
<blockquote><p></p></blockquote>
<p>解释:</p>
<ul><li>第一行:类别 1 概率最大(0.8)</li><li>第二行:类别 0 概率最大(0.6)</li><li>第三行:类别 1 概率最大(0.4)</li></ul>
<p>✅ 这正是深度学习模型(如 softmax 输出层)中最常见的做法。</p>
<p class="maodian"><a name="_label5"></a></p><h2>六、常见坑点总结</h2>
<table><thead><tr><th>问题</th><th>错误示例</th><th>正确做法</th></tr></thead><tbody><tr><td>没有指定 axis 导致结果不符合预期</td><td>np.argmax(matrix)</td><td>指定 axis=1 或 axis=0</td></tr><tr><td>想取最大值却用 argmax</td><td>np.argmax(x)</td><td>改为 np.max(x)</td></tr><tr><td>想得到二维坐标但忘了用 np.unravel_index()</td><td>直接打印索引</td><td>使用 np.unravel_index() 转换</td></tr></tbody></table>
<p class="maodian"><a name="_label6"></a></p><h2>七、总结对比表</h2>
<table><thead><tr><th>功能</th><th>函数</th><th>返回内容</th><th>常见用途</th></tr></thead><tbody><tr><td>取最大值</td><td>np.max()</td><td>最大值</td><td>查看数值本身</td></tr><tr><td>取最大值索引</td><td>np.argmax()</td><td>最大值位置</td><td>分类预测、矩阵分析</td></tr><tr><td>获取二维索引</td><td>np.unravel_index()</td><td>行列坐标</td><td>多维数组索引转换</td></tr></tbody></table>
頁:
[1]