[Numpy-discussion] max argmax combo

Travis Oliphant oliphant at ee.byu.edu
Tue Sep 19 18:16:32 CDT 2006


Charles R Harris wrote:

>
>
> On 9/18/06, *Bill Baxter* <wbaxter at gmail.com 
> <mailto:wbaxter at gmail.com>> wrote:
>
>     On 9/19/06, Charles R Harris <charlesr.harris at gmail.com
>     <mailto:charlesr.harris at gmail.com>> wrote:
>     > On 9/18/06, Bill Baxter <wbaxter at gmail.com
>     <mailto:wbaxter at gmail.com>> wrote:
>     > > I find myself often wanting both the max and the argmax of an
>     array.
>     > > (And same for the other arg* functions)
>
>     > > You have to do something like
>     > >     a = rand(10,5)
>     > >     imax = a.argmax(axis=0)
>     > >     vmax = a[(imax, range(5))]
>     > >
>     > I don't generally like overloading return values, the function
>     starts to
>     > lose its definition and becomes a bit baroque where simply
>     changing a
>     > keyword value can destroy the viability of the following code.
>
>     Agreed.  Seems like the only justification is if you get multiple
>     results from one calculation but only rarely want the extra values.
>     It doesn't make sense to always return them, but it's also not worth
>     making a totally different function.
>
>
>     > But I can see the utility of what you want. Hmm,  this problem
>     is not unique to argmax.
>     > Maybe what we need is a general way to extract values, something
>     like
>     >
>     > extract(a, imax, axis=0)
>     >
>     > to go along with all the single axis functions.
>
>     Yes, I think that would be easier to remember.
>
>     It should also work for the axis=None case.
>       imax = a.argmax(axis=None)
>       v = extract(a, imax, axis=None)
>
>
> It shouldn't be too difficult to jig something up given all the 
> example code. I can do that, but I would like more input first. The 
> questions I have are these.
>
> 1) Should it be done?
> 2) Should it be a method? (functions being somewhat deprecated)
> 3) What name should it have?
>
> I think Travis will have to weigh in on this. IIRC, he felt that the 
> number of methods was getting out of hand.


I can support adding a *function* that does both.   It can't be named 
extract (that already exists).   There should be one for all the 
"arg"-like functions.

If somebody doesn't add it before 1.0 final, it can wait for 1.0.1

-Travis





More information about the Numpy-discussion mailing list