From: Travis O. <oli...@ee...> - 2006-09-19 23:16:34
|
Charles R Harris wrote: > > > On 9/18/06, *Bill Baxter* <wb...@gm... > <mailto:wb...@gm...>> wrote: > > On 9/19/06, Charles R Harris <cha...@gm... > <mailto:cha...@gm...>> wrote: > > On 9/18/06, Bill Baxter <wb...@gm... > <mailto: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. 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 |