龙空技术网

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

梯阅线条 28

前言:

当前大家对“求一维数组中的最大值”大约比较注重,我们都需要知道一些“求一维数组中的最大值”的相关知识。那么小编同时在网络上网罗了一些有关“求一维数组中的最大值””的相关知识,希望你们能喜欢,你们快快来了解一下吧!

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)
2 END

本文首发微信公众号:梯阅线条

更多内容参考python知识分享或软件测试开发目录。

标签: #求一维数组中的最大值