[Numpy-discussion] return index of maximum value in an array easily?

Sebastian Berg sebastian at sipsolutions.net
Fri Jan 11 20:33:07 EST 2013


On Sat, 2013-01-12 at 00:26 +0100, Chao YUE wrote:
> Hi,
> 
> I don't know how others think about this. Like you point out, one can
> use 
> np.nonzero(a==np.max(a)) as a workaround. 
> 
> For the second point, in case I have an array:
> a = np.arange(24.).reshape(2,3,4)
> 
> suppose I want to find the index for maximum value of each 2X3 array
> along 
> the 3rd dimension, what I can think of will be:
> 
> index_list = []
> for i in range(a.shape[-1]):
>     data = a[...,i]
>     index_list.append(np.nonzero(data==np.max(data)))
> 
To keep being close to min/max (and other ufunc based reduce
operations), it would seem consistent to allow something like
np.argmax(array, axis=(1, 2)), which would give a tuple of
arrays as result such that

array[np.argmax(array, axis=(1,2))] == np.max(array, axis=(1,2))

But apart from consistency, I am not sure anyone would get the idea of
giving multiple axes into the function...

> 
> In [87]:
> 
> 
> index_list
> Out[87]:
> [(array([1]), array([2])),
>  (array([1]), array([2])),
>  (array([1]), array([2])),
>  (array([1]), array([2]))]
> 
> 
> If we want to make the np.argmax function doing the job of this part
> of code,
> could we add another some kind of boolean keyword argument, for
> example, 
> "exclude" to the function? 
> [this is only my thinking, and I am only a beginner, maybe it's
> stupid!!!]
> 
> np.argmax(a,axis=2,exclude=True) (default value for exclude is False)
> 
> it will give the index of maximum value along all other axis except
> the axis=2
> (which is acutally the 3rd axis)
> 
> The output will be:
> 
> np.array(index_list).squeeze()
> 
> array([[1, 2],
>        [1, 2],
>        [1, 2],
>        [1, 2]])
> 
> and one can use a[1,2,i] (i=1,2,3,4) to extract the maximum value. 
> 
> I doubt this is really useful...... too complicated......
> 
> Chao
> 
> On Fri, Jan 11, 2013 at 11:00 PM, Nathaniel Smith <njs at pobox.com>
> wrote:
>         On Thu, Jan 10, 2013 at 9:40 AM, Chao YUE
>         <chaoyuejoy at gmail.com> wrote:
>         > Dear all,
>         >
>         > Are we going to consider returning the index of maximum
>         value in an array
>         > easily
>         > without calling np.argmax and np.unravel_index
>         consecutively?
>         
>         
>         This does seem like a good thing to support somehow. What
>         would a good
>         interface look like? Something like np.nonzero(a ==
>         np.max(a))? Should
>         we support vectorized operation (e.g. argmax of each 2-d
>         subarray of a
>         3-d array along some axis)?
>         
>         -n
>         _______________________________________________
>         NumPy-Discussion mailing list
>         NumPy-Discussion at scipy.org
>         http://mail.scipy.org/mailman/listinfo/numpy-discussion
>         
> 
> 
> 
> -- 
> ***********************************************************************************
> Chao YUE
> Laboratoire des Sciences du Climat et de l'Environnement (LSCE-IPSL)
> UMR 1572 CEA-CNRS-UVSQ
> Batiment 712 - Pe 119
> 91191 GIF Sur YVETTE Cedex
> Tel: (33) 01 69 08 29 02; Fax:01.69.08.77.16
> 
> ************************************************************************************
> 
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion





More information about the NumPy-Discussion mailing list