python数据分析numpy基础之argmax求数组最大值索引

1 python数据分析numpy基础之argmax求数组最大值索引

python的numpy库的argmax()函数,用于获取沿指定轴的最大值的索引。

用法

numpy.argmax(a, axis=None, out=None, *, keepdims=<no value>)

描述

argmax()返回沿指定轴的最大值的索引。

入参axis表示指定轴,默认为None表示整个数组的最大值的索引而不是某个轴的最大值索引,即转为一维数组后的最大值的索引。axis只能为整数,不支持整数元组。

入参keepdims表示是否保留指定轴的尺寸为1,默认为False,不保留。

1.1 入参a

numpy.argmax()的入参a,为必选入参,可以为数组、列表、元组。

>>> import numpy as np
# 入参a为列表
>>> np.argmax([-5,-10,0,1,5,39,2])
5
# 入参a为元组
>>> np.argmax((-5,-10,0,1,5,39,2))
5
# 入参a为数组
>>> np.argmax(np.array((-5,-10,0,1,5,39,2)))
5

1.2 入参axis为整数

numpy.argmax()的入参axis为可选入参,只能为整数(不支持元组),范围[0, ndim),默认为None,表示求整个数组的最大值的索引,若为多维数组则转换为一维数组来获取最大值的索引。

若axis=n为整数,则对沿指定轴n的元素求最大值的索引,并且只返回指定轴的索引,其他轴索引不返回。

若axis=负数,则-1对应最后一个轴,-2倒数第2个轴,依此类推。

最大值多次出现时,argmax()返回第一次出现的索引。

np.ndindex(ar3.shape) 获取指定形状数组的索引迭代器对象,遍历迭代器索引获取数组元素。

>>> import numpy as np
>>> ar3=np.array([[[12, 13, 8, 15 ],
        [ 19,  25,  16,  5],
        [ 18,  29, 10, 31]],

       [[9,  11,  21,  3],
        [16, 17, 31, 19],
        [20, 3, 22, 23]]])
# axis默认为None,返回整个数组的最大值的索引
>>> np.argmax(ar3)
11
# ar3最大值为31
>>> np.max(ar3)
31
# axis=None时,ar3相当于一维数组
>>> ar3.reshape(ar3.size)
array([12, 13,  8, 15, 19, 25, 16,  5, 18, 29, 10, 31,  9, 11, 21,  3, 16,
       17, 31, 19, 20,  3, 22, 23])
# 最大值多次出现时,返回第一次出现的索引
# 索引为11的值为最大值31,为第一次出现的索引,索引argmax()返回15
>>> ar3.reshape(ar3.size)[11]
31
# 索引为18的值为最大值31
>>> ar3.reshape(ar3.size)[18]
31
# np.ndindex(ar3.shape) 获取指定形状数组的索引迭代器对象
>>> ar3vis=[str(ar3[i])+str(i) for i in np.ndindex(ar3.shape)]
>>> ar3vi=np.array(ar3vi).reshape(ar3.shape)
# 获取ar3数组和其索引
# n维数组由n个轴的索引组成
# 比如三维数组索引(1, 0, 0),分别表示0/1/2轴的索引
>>> ar3vi
array([[['12(0, 0, 0)', '13(0, 0, 1)', '8(0, 0, 2)', '15(0, 0, 3)'],
        ['19(0, 1, 0)', '25(0, 1, 1)', '16(0, 1, 2)', '5(0, 1, 3)'],
        ['18(0, 2, 0)', '29(0, 2, 1)', '10(0, 2, 2)', '31(0, 2, 3)']],

       [['9(1, 0, 0)', '11(1, 0, 1)', '21(1, 0, 2)', '3(1, 0, 3)'],
        ['16(1, 1, 0)', '17(1, 1, 1)', '18(1, 1, 2)', '19(1, 1, 3)'],
        ['20(1, 2, 0)', '3(1, 2, 1)', '22(1, 2, 2)', '23(1, 2, 3)']]],
      dtype='<U11')
# axis=0,只返回沿0轴最大值的索引,0轴大小为2,索引只有0,1
>>> np.argmax(ar3,axis=0)
array([[0, 0, 1, 0],
       [0, 0, 1, 1],
       [1, 0, 1, 0]], dtype=int64)
# max()获取0轴最大值,argmax()获取0轴最大值的索引
# 比如20的索引为(1, 2, 0),取0轴索引1
>>> np.max(ar3,axis=0)
array([[12, 13, 21, 15],
       [19, 25, 31, 19],
       [20, 29, 22, 31]])
# axis=1,只返回沿1轴最大值的索引,1轴大小为3,索引只有0,1,2
>>> np.argmax(ar3,axis=1)
array([[1, 2, 1, 2],
       [2, 1, 1, 2]], dtype=int64)
# 比如29(0, 2, 1),取1轴索引2
>>> np.max(ar3,axis=1)
array([[19, 29, 16, 31],
       [20, 17, 31, 23]])
# axis=2,只返回沿2轴最大值的索引,2轴大小为4,索引只有0,1,2,3   
>>> np.argmax(ar3,axis=2)
array([[3, 1, 3],
       [2, 2, 3]], dtype=int64)
# 比如 23(1, 2, 3)),取2轴索引3
>>> np.max(ar3,axis=2)
array([[15, 25, 31],
       [21, 31, 23]])
# axis=负数,则-1对应最后一个轴,-2倒数第2个轴,依此类推。
>>> np.argmax(ar3,axis=-1)
array([[3, 1, 3],
       [2, 2, 3]], dtype=int64)

1.3 入参keepdims

numpy.argmax()的入参keepdims为可选入参,只能为False或True,默认为False。

keepdims为False则不保留指定轴的尺寸,即返回最大值索引的数组形状,不包括指定轴。

keepdims为True则保留指定轴的持仓为1,即返回最大值索引的数组形状,包括指定轴且大小为1。

>>> import numpy as np
>>> ar3=np.array([[[12, 13, 8, 15 ],
        [ 19,  25,  16,  5],
        [ 18,  29, 10, 31]],

       [[9,  11,  21,  3],
        [16, 17, 31, 19],
        [20, 3, 22, 23]]])
>>> kdnt=np.argmax(ar3,keepdims=True)
>>> kdnf=np.argmax(ar3,keepdims=False)
>>> kdn=np.argmax(ar3)
# keepdims=True,最大值索引数组,保留指定轴,且尺寸为1
>>> kdnt.shape,kdnt.ndim
((1, 1, 1), 3)
# keepdims=False,最大值索引数组,删除指定轴
>>> kdnf.shape,kdnf.ndim
((), 0)
# keepdims默认False,最大值索引数组,删除指定轴
>>> kdn.shape,kdn.ndim
((), 0)
>>> kdnt,kdnf,kdn
(array([[[11]]], dtype=int64), 11, 11)
>>> kd0t=np.argmax(ar3,axis=0,keepdims=True)
>>> kd0=np.argmax(ar3,axis=0)
# True保留axis=0且尺寸为1
>>> kd0t.shape,kd0t.ndim
((1, 3, 4), 3)
# False删除axis=0
>>> kd0.shape,kd0.ndim
((3, 4), 2)
>>> kd0t
array([[[0, 0, 1, 0],
        [0, 0, 1, 1],
        [1, 0, 1, 0]]], dtype=int64)
>>> kd0
array([[0, 0, 1, 0],
       [0, 0, 1, 1],
       [1, 0, 1, 0]], dtype=int64)
>>> kd1t=np.argmax(ar3,axis=1,keepdims=True)
>>> kd1=np.argmax(ar3,axis=1)
# True保留axis=1且尺寸为1
>>> kd1t.shape,kd1t.ndim
((2, 1, 4), 3)
# False删除axis=1
>>> kd1.shape,kd1.ndim
((2, 4), 2)
>>> kd1t
array([[[1, 2, 1, 2]],

       [[2, 1, 1, 2]]], dtype=int64)
>>> kd1
array([[1, 2, 1, 2],
       [2, 1, 1, 2]], dtype=int64)
  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值