From: Charles R H. <cha...@gm...> - 2006-09-19 04:05:46
|
On 9/18/06, Bill Baxter <wb...@gm...> wrote: > > On 9/19/06, Charles R Harris <cha...@gm...> wrote: > > On 9/18/06, Bill Baxter <wb...@gm...> 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. --Bill Chuck |