Numpy函数中的max, amax, argmax,where的解释
注:本文用得IDLE,写了一些自己的浅显理解,如有错误,请指正
max
np.max()和np.amax()等价函数,求得数组中的第一个最大值,ndarray和array通用,但是得不到索引值
>>> array = np.array([4, 5, 9, 10, 7, 8])
>>> np.max(array) #np.amax(array)得到得结果一样
>>> 10
>>> ndarray = np.array([[1, 2, 3, 4], [4, 3 , 2, 1], [5, 6 ,7, 8], [8, 7, 6, 5]])
>>> ndarray
array([[1, 2, 3, 4],
[4, 3, 2, 1],
[5, 6, 7, 8],
[8, 7, 6, 5]])
>>> np.max(ndarray) #np.amax(ndarray)得到得结果一样
>>> 8
多维数组可以加参数axis = 0, 1, …(当然,一维数组的axis为0)等来获得某一维度中的最大值并返回列表,如下所示:当axis = 0时获取每一列中的第一个最大值
>>> ndarray
array([[1, 2, 3, 4],
[4, 3, 2, 1],
[5, 6, 7, 8],
[8, 7, 6, 5]])
>>> # 当axis = 0,时获取每一列中的第一个最大值
>>> np.amax(ndarray, axis = 0)
>>> array([8, 7, 7, 8])
>>> # 当axis = 1,时获取每一行中的第一个最大值
>>>> np.amax(ndarray, axis = 1)
>>> array([4, 4, 8, 8])
argmax
获得第一个最大值的索引,切记索引从0开始,如下所示:
>>> array
>>> array([ 4, 5, 9, 10, 7, 8])
>>> np.argmax(array)
>>> 3
在ndarray中,要加上axis,否则python会把ndarray转化为array,得到的值为array中的第一个最大值的索引
>>> ndarray
array([[1, 2, 3, 4],
[4, 3, 2, 1],
[5, 6, 7, 8],
[8, 7, 6, 5]])
>>> np.argmax(ndarray)
>>> 11
当加上axis时:
>>> ndarray
array([[1, 2, 3, 4],
[4, 3, 2, 1],
[5, 6, 7, 8],
[8, 7, 6, 5]])
>>> # 当axis = 0,时获取每一列中的第一个最大值的索引
>>> np.argmax(ndarray, axis = 0)
>>> array([3, 3, 2, 2], dtype=int64)
>>> # 当axis = 1,时获取每一行中的第一个最大值的索引
>>> np.argmax(ndarray, axis = 1)
>>> array([3, 0, 3, 0], dtype=int64)
where
where返回的是一个坐标,为元组,在一维数组中
>>> array
>>> array([ 4, 5, 9, 10, 7, 8])
>>> np.where(array == np.max(array))
>>> (array([3], dtype=int64),)
>>>> type(np.where(array == np.max(array)))
>>> <class 'tuple'>
二维数组中得到二维元组,可以通过索引来访问每一个值,tuple[0][0]为第一个值,其实和列表获取值的方式一样
>>> ndarray
array([[1, 2, 3, 4],
[4, 3, 2, 1],
[5, 6, 7, 8],
[8, 7, 6, 5]])
>>> np.where(ndarray == np.max(ndarray))
>>> (array([2, 3], dtype=int64), array([3, 0], dtype=int64))
当然,where的用法为np.where(condition, x, y),当满足condition时,输出x,否则输出y,如下所示:
>>> np.where(array > 5, 1, -1)
>>> array([-1, -1, 1, 1, 1, 1])
当没有x和y时,则输出满足condition中元素为True的坐标,第一个介绍的就是没有x,y的情况,我们可以把ndarray == np.max(ndarray)输出来看:
>>> ndarray == np.max(ndarray)
array([[False, False, False, False],
[False, False, False, False],
[False, False, False, True],
[ True, False, False, False]])
我们可以看到有两个True,故坐标为([2, 3], [3, 0])