np.argmax()和max()助解

本文详细介绍了numpy库中的argmax()和max()函数的使用。argmax()函数返回数组中最大值的索引,而max()函数则直接返回最大值。通过多个示例,分别展示了在一维、二维和三维张量上的应用,以及axis参数如何影响结果。这两个函数在数据分析和机器学习中经常用于寻找最大值及其位置。

一、argmax()

argmax取最大值,然后返回索引

(1)一维向量

import numpy as np

a = np.array([3, 1, 2, 4, 6, 1])
res = np.argmax(a)
print(res)

>>> 4

取a中元素最大值所对应的索引(索引默认从0开始),此时的最大值是6,其对应的位置索引值为4。

(2)二维张量

a = np.array([[1, 5, 5, 2],
              [9, 6, 2, 8],
              [3, 7, 9, 1]])
res = np.argmax(a, axis=0)
print(res)

>>> [1 2 2 1]
axis=0, 得到结果:
[1, 5, 5, 2]   [9, 6, 2, 8]   [3, 7, 9, 1] , 然后再依次取三个列表中对应元素,如下:
[1, 9, 3]  ===>  最大值9  ===>  索引1
[5, 6, 7]  ===>  最大值7  ===>  索引2
[5, 2, 9]  ===>  最大值9  ===>  索引2
[2, 8, 1]  ===>  最大值8  ===>  索引1
a = np.array([[1, 5, 5, 2],
              [9, 6, 2, 8],
              [3, 7, 9, 1]])
res = np.argmax(a, axis=1)
print(res)


>>> [1 0 2]
1, 5, 5, 2  ===> 最大值5 ===> 索引1
9, 6, 2, 8  ===> 最大值9 ===> 索引0
3, 7, 9, 1  ===> 最大值9 ===> 索引2

(3)三维张量

a = np.array([
    [
        [1, 5, 5, 2],
        [9, -6, 2, 8],
        [-3, 7, -9, 1]
    ],

    [
        [-1, 7, -5, 2],
        [9, 6, 2, 8],
        [3, 7, 9, 1]
    ],
    [
        [21, 6, -5, 2],
        [9, 36, 2, 8],
        [3, 7, 79, 1]
    ]
])
res = np.argmax(a, axis=0)
print(res)


>>> [[2 1 0 0]
    [0 2 0 0]
    [1 0 2 0]]

axis=0,得到三个二维张量,

[
    [1, 5, 5, 2],
    [9, -6, 2, 8],
    [-3, 7, -9, 1]
],
[
    [-1, 7, -5, 2],
    [9, 6, 2, 8],
    [3, 7, 9, 1]
],
[
    [21, 6, -5, 2],
    [9, 36, 2, 8],
    [3, 7, 79, 1]
]

示意图:

a = np.array([
    [
        [1, 5, 5, 2],
        [9, -6, 2, 8],
        [-3, 7, -9, 1]
    ],

    [
        [-1, 7, -5, 2],
        [9, 6, 2, 8],
        [3, 7, 9, 1]
    ],
    [
        [21, 6, -5, 2],
        [9, 36, 2, 8],
        [3, 7, 79, 1]
    ]
])
res = np.argmax(a, axis=1)
print(res)

>>> [[1 2 0 1]
     [1 0 2 1]
     [0 1 2 1]]

axis=1,得到第一组[1, 5, 5, 2], [9, -6, 2, 8], [-3, 7, -9, 1];第二组[-1, 7, -5, 2], [9, 6, 2, 8], [3, 7, 9, 1];第三组[21, 6, -5, 2], [9, 36, 2, 8], [3, 7, 79, 1]。逐个元素取最大索引,首先是第一组:

a = np.array([
    [
        [1, 5, 5, 2],
        [9, -6, 2, 8],
        [-3, 7, -9, 1]
    ],

    [
        [-1, 7, -5, 2],
        [9, 6, 2, 8],
        [3, 7, 9, 1]
    ],
    [
        [21, 6, -5, 2],
        [9, 36, 2, 8],
        [3, 7, 79, 1]
    ]
])
res = np.argmax(a, axis=2)
print(res)

>>> [[1 0 1]
     [1 0 2]
     [0 1 2]]

 axis=2,得到九组数据,如下示意图:

 二、max() 

返回最大值数值。

t = np.array([[3, 4, 1, 0], [12, 1, 2, 3], [52, 34, 88, 11]])
res1 = t.max(axis=0)
print(res1)
res2 = t.max(axis=1)
print(res2)


>>>[52 34 88 11]
    [ 4 12 88]

axis=0,得到一组一维张量:[3, 4, 1, 0], [12, 1, 2, 3], [52, 34, 88, 11],向量逐元素计算最大值,例如3, 12,52 其中的最大值为52。

axis=1,得到三组数据:第一组3, 4, 1, 0;第二组:12, 1, 2, 3;第三组:52, 34, 88, 11。第一组最大值4,第二组最大值12,...

axis=?的问题参见:

https://blog.youkuaiyun.com/MasterCayman/article/details/119488357

参考:

1.https://blog.youkuaiyun.com/weixin_43987408/article/details/115283685?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0.control&spm=1001.2101.3001.4242

2.https://blog.youkuaiyun.com/weixin_38145317/article/details/79650188

### numpy中`max``argmax`的区别及用法 #### 基本概念 `numpy.max()` `numpy.argmax()` 是 NumPy 中用于处理数组的两个重要函数,它们的功能不同但密切相关。 - **`numpy.max()`**: 返回数组中的最大值或者沿着指定轴的最大值[^3]。 - **`numpy.argmax()`**: 返回数组中最大值的索引位置,如果指定了轴,则返回该轴上每组数据中最大值的位置[^5]。 --- #### 参数说明 两者都支持以下参数: - **`a`**: 输入的数组。 - **`axis`**: 可选参数,指定操作的轴。如果不指定,默认将整个数组展平为一维后再执行操作。 - **`out`**: 可选参数,用于存储结果的输出数组。 --- #### 功能对比 | 函数 | 描述 | |--------------|----------------------------------------------------------------------------------------| | `numpy.max()` | 返回数组中的最大值或沿某一轴上的最大值。 | | `numpy.argmax()` | 返回数组中最大值的索引位置,或沿某一轴上每组数据中最大值的索引位置。 | --- #### 示例代码 以下是具体的使用示例: ```python import numpy as np # 创建一个随机数组 np.random.seed(0) a = np.random.randint(0, 100, (3, 4), dtype=np.int32) print(f'原始数组 a:\n{a}\n') # 使用 max 获取最大值 a_max_all = np.max(a) # 整个数组的最大值 print(f'整个数组的最大值: {a_max_all} [^3]\n') a_max_axis_0 = np.max(a, axis=0) # 按第0轴获取最大值 print(f'按第0轴的最大值: \n{a_max_axis_0} \n') a_max_axis_1 = np.max(a, axis=1) # 按第1轴获取最大值 print(f'按第1轴的最大值: \n{a_max_axis_1} \n') # 使用 argmax 获取最大值的索引 a_argmax_all = np.argmax(a) # 整个数组中最大值的索引 print(f'整个数组中最大值的索引: {a_argmax_all} \n') a_argmax_axis_0 = np.argmax(a, axis=0) # 按第0轴获取最大值的索引 print(f'按第0轴最大值的索引: \n{a_argmax_axis_0} \n') a_argmax_axis_1 = np.argmax(a, axis=1) # 按第1轴获取最大值的索引 print(f'按第1轴最大值的索引: \n{a_argmax_axis_1} ') ``` 运行上述代码后,可以观察到如下结果(基于固定种子生成的数据): ``` 原始数组 a: [[51 92 14 71] [60 20 82 86] [74 74 96 8]] 整个数组的最大值: 96 按第0轴的最大值: [74 92 96 86] 按第1轴的最大值: [92 86 96] 整个数组中最大值的索引: 10 按第0轴最大值的索引: [2 0 2 1] 按第1轴最大值的索引: [1 3 2] ``` --- #### 结果释 1. 对于 `np.max(a)`,它返回的是整个数组中的最大值 `96`。 2. 当指定 `axis=0` 或 `axis=1` 时,分别表示按列或按行查找最大值。 3. 对于 `np.argmax(a)`,它返回的是最大值在扁平化后的索引位置 `10`。 4. 如果指定 `axis` 参数,`argmax` 将返回对应轴上每一组数据中最大值的索引位置。 --- #### 总结 - `np.max()` 关注的是数值本身,而 `np.argmax()` 更关注这些数值所在的位置。 - 它们都可以通过设置 `axis` 来控制作用的方向,从而实现更灵活的操作。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值