温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

numpy中argmax怎么用

发布时间:2022-01-16 15:30:40 来源:亿速云 阅读:301 作者:小新 栏目:开发技术

这篇文章将为大家详细讲解有关numpy中argmax怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

    一、基本介绍

    numpy中的argmax简而言之就是返回最大值的索引,当使用np.argmax(axis),这里方向axis的指定往往让人不理解。
    简而言之:这里axis可以让我们从、或者是深度方向来看一个高维数组。

    二、代码实验

    1、一维数组情况

    numpy中argmax怎么用

    简单一维情况,np.argmax()直接返回最大值的索引,不指定axis可以认为是将数组拉平之后寻找最大值的索引

    1.1、axis=0

    当我们指定axis=0时,其实是在中作比较,寻找最大的的索引

    numpy中argmax怎么用

    当然对于这个一维情况没有什么影响。

    1.2、axis=1

    numpy中argmax怎么用

    当我们指定axis=1的时候报错了,这是因为我们的a是一维数组,没有axis=1这个轴,可见当我们使用np.argmax()时axis的指定不能超过所需要排序的数组

    2、二维数组情况

    numpy中argmax怎么用

    不指定axis就是相当于把二维数组拉平,直接选取最大值的索引

    2.1、axis=0

    numpy中argmax怎么用

    指定axis=0就是比较,返回索引中的最大值

    numpy中argmax怎么用

    我们改写一个b中的元素,我们期望的结果是[2,2,1,2]

    numpy中argmax怎么用

    实际结果和我们期望相符合

    2.2、axis=1

    numpy中argmax怎么用

    指定axis=0就是比较,返回索引中的最大值

    3、三维数组情况

    一个三维数组可以视作一张图片,它的三个维度分别为(high, width, channels) 分别表示图像的高、宽、通道数(深度)。常见的彩色图像都有三个通道,我们以常见的RGB图像为例构建一个数组。

    numpy中argmax怎么用

    直接使用np.argmax(),就是之间将三维数组拉平,寻找最大值的索引

    3.1、axis=0

    单独查看c的三个通道的数据,如图所示

    numpy中argmax怎么用

    对于三个通道取axis=0意味分别比较列返回行的最大值索引

    numpy中argmax怎么用

    我们期望的返回值应该是[[1,1,1,],[1,1,1],[1,1,1]],实际的结果和我们的期望一致

    numpy中argmax怎么用

    3.2、axis=1

    numpy中argmax怎么用

    对于三个通道取axis=1意味分别比较行返回列的最大值索引

    我们期望的结果是[[2, 2, 2],[2, 2, 2],[2, 2, 2],[2, 2, 2]],,实际的结果和我们的期望一致

    numpy中argmax怎么用

    3.3、axis=2

    取axis=2意味着我们从图像的深度方向(通道方向)来进行比较,可以认为三个数组的叠在一起的,分别对应channel0,channel1,channel2而我们取最大值的索引就是返回对应pixel像素所在的通道索引

    numpy中argmax怎么用

    c的channel2所有的像素值均大于其他两个channel所有返回值应该是[[2,2,2,],[2,2,2,],[2,2,2,],[2,2,2,]],实际结果和我的期望一致

    numpy中argmax怎么用

    3.4、axis=-1

    axis=-1即是反过来看轴,对于三维情况axis=-1axis=2一致

    numpy中argmax怎么用

    其他
    对于二维情况axis=-1anxis=1一致
    对于一维情况axis=0anxis=-1一致

    四、Reference

    https://blog.csdn.net/weixin_39190382/article/details/105854567

    https://www.cnblogs.com/zhouyang209117/p/6512302.html

    PS:补充

    1.对一个一维向量

    import numpy as np
    a = np.array([3, 1, 2, 4, 6, 1])
    b=np.argmax(a)#取出a中元素最大值所对应的索引,此时最大值位6,其对应的位置索引值为4,(索引值默认从0开始)
    print(b)#4

    2.对2维向量(通常意义下的矩阵)a[][]

    import numpy as np
    a = np.array([[1, 5, 5, 2],
                  [9, 6, 2, 8],
                  [3, 7, 9, 1]])
    b=np.argmax(a, axis=0)#对二维矩阵来讲a[0][1]会有两个索引方向,第一个方向为a[0],默认按列方向搜索最大值
    #a的第一列为1,9,3,最大值为9,所在位置为1,
    #a的第一列为5,6,7,最大值为7,所在位置为2,
    #此此类推,因为a有4列,所以得到的b为1行4列,
    print(b)#[1 2 2 1]
     
    c=np.argmax(a, axis=1)#现在按照a[0][1]中的a[1]方向,即行方向搜索最大值,
    #a的第一行为1,5,5,2,最大值为5(虽然有2个5,但取第一个5所在的位置),索引值为1,
    #a的第2行为9,6,2,8,最大值为9,索引值为0,
    #因为a有3行,所以得到的c有3个值,即为1行3列
    print(c)#[1 0 2]

    3.对于三维矩阵a[0][1][2],情况最为复制,但在lstm中应用最广

    import numpy as np
    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]
                  ]
                ])
    b=np.argmax(a, axis=0)#对于三维度矩阵,a有三个方向a[0][1][2]
    #当axis=0时,是在a[0]方向上找最大值,即两个矩阵做比较,具体
    #(1)比较3个矩阵的第一行,即拿[1, 5, 5, 2],
    #                         [-1, 7, -5, 2],
    #                         [21, 6, -5, 2],
    #再比较每一列的最大值在那个矩阵中,可以看出第一列1,-2,21最大值为21,在第三个矩阵中,索引值为2
    #第2列5,7,6最大值为7,在第2个矩阵中,索引值为1.....,最终得出比较结果[2 1 0 0]
    #再拿出三个矩阵的第二行,按照上述方法,得出比较结果 [0 2 0 0]
    #一共有三个,所以最终得到的结果b就为3行4列矩阵
    print(b)
    #[[0 0 0 0]
     #[0 1 0 0]
     #[1 0 1 0]]
     
    c=np.argmax(a, axis=1)#对于三维度矩阵,a有三个方向a[0][1][2]
    #当axis=1时,是在a[1]方向上找最大值,即在列方向比较,此时就是指在每个矩阵内部的列方向上进行比较
    #(1)看第一个矩阵
                      # [1, 5, 5, 2],
                      # [9, -6, 2, 8],
                      # [-3, 7, -9, 1]
    #比较每一列的最大值,可以看出第一列1,9,-3最大值为9,,索引值为1
    #第2列5,-6,7最大值为7,,索引值为2
    # 因此对第一个矩阵,找出索引结果为[1,2,0,1]
    #再拿出2个,按照上述方法,得出比较结果 [1 0 2 1]
    #一共有三个,所以最终得到的结果b就为3行4列矩阵
    print(c)
    #[[1 2 0 1]
     # [1 0 2 1]
     # [0 1 2 1]]
     
    d=np.argmax(a, axis=2)#对于三维度矩阵,a有三个方向a[0][1][2]
    #当axis=2时,是在a[2]方向上找最大值,即在行方向比较,此时就是指在每个矩阵内部的行方向上进行比较
    #(1)看第一个矩阵
                      # [1, 5, 5, 2],
                      # [9, -6, 2, 8],
                      # [-3, 7, -9, 1]
    #寻找第一行的最大值,可以看出第一行[1, 5, 5, 2]最大值为5,,索引值为1
    #第2行[9, -6, 2, 8],最大值为9,,索引值为0
    # 因此对第一个矩阵,找出行最大索引结果为[1,0,1]
    #再拿出2个矩阵,按照上述方法,得出比较结果 [1 0 2 1]
    #一共有三个,所以最终得到的结果d就为3行3列矩阵
    print(d)
    # [[1 0 1]
    #  [1 0 2]
    #  [0 1 2]]
    ###################################################################
    #最后一种情况,指定矩阵a[0, -1, :],第一个数字0代表取出第一个矩阵(从前面可以看出a有3个矩阵)为
    # [1, 5, 5, 2],
    # [9, -6, 2, 8],
    # [-3, 7, -9, 1]
    #第二个数字“-1”代表拿出倒数第一行,为
    # [-3, 7, -9, 1]
    #这一行的最大索引值为1
     
    # ,-1,代表最后一行
    m=np.argmax(a[0, -1, :])
    print(m)#1
     
    #h,取a的第2个矩阵
    # [-1, 7, -5, 2],
    # [9, 6, 2, 8],
    # [3, 7, 9, 1]
    #的第3行
    # [3, 7, 9, 1]
    #的最大值为9,索引为2
    h=np.argmax(a[1, 2, :])
    print(h)#2
     
    g=np.argmax(a[1,:, 2])#g,取出矩阵a,第2个矩阵的第3列为-5,2,9,最大值为9,索引为2
    print(g)#2

    关于“numpy中argmax怎么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI