Prev: Sometimes the python shell cannot recognize the presence of anattribute.
Next: Fetch files from mail in python
From: Victor Eijkhout on 31 Mar 2010 14:58 Robert Kern <robert.kern(a)gmail.com> wrote: > second[first.argsort()] Really cool. Thanks. > Ask numpy questions on the numpy mailing list. I will. I thought that this question would have an answer in a generic python idiom. Victor.  Victor Eijkhout  eijkhout at tacc utexas edu
From: Robert Kern on 31 Mar 2010 15:13 On 20100331 13:58 PM, Victor Eijkhout wrote: > Robert Kern<robert.kern(a)gmail.com> wrote: > >> second[first.argsort()] > > Really cool. Thanks. > >> Ask numpy questions on the numpy mailing list. > > I will. I thought that this question would have an answer in a generic > python idiom. When dealing with numpy arrays, the generic Python idiom is often much slower.  Robert Kern "I have come to believe that the whole world is an enigma, a harmless enigma that is made terrible by our own mad attempt to interpret it as though it had an underlying truth."  Umberto Eco
From: Steve Holden on 31 Mar 2010 15:22 Victor Eijkhout wrote: > Robert Kern <robert.kern(a)gmail.com> wrote: > >> second[first.argsort()] > > Really cool. Thanks. > >> Ask numpy questions on the numpy mailing list. > > I will. I thought that this question would have an answer in a generic > python idiom. > > Victor. Not an unreasonable assumption, but it turns out that for most Python users (estimate PFTA: 97%) numpy/scipt is esoteric knowledge. regards Steve  Steve Holden +1 571 484 6266 +1 800 494 3119 See PyCon Talks from Atlanta 2010 http://pycon.blip.tv/ Holden Web LLC http://www.holdenweb.com/ UPCOMING EVENTS: http://holdenweb.eventbrite.com/
From: Raymond Hettinger on 31 Mar 2010 16:09 On Mar 30, 4:25 pm, s...(a)sig.for.address (Victor Eijkhout) wrote: > I have two arrays, made with numpy. The first one has values that I want > to use as sorting keys; the second one needs to be sorted by those keys. > Obviously I could turn them into a dictionary of pairs and sort by the > first member, but I think that's not very efficient, at least in space, > and this needs to be done as efficiently as possible. Alf's recommendation is clean and correct. Just make a list of tuples. FWIW, here's a little hack that does the work for you: >>> values = ['A', 'B', 'C', 'D', 'E'] >>> keys = [50, 20, 40, 10, 30] >>> keyiter = iter(keys) >>> sorted(values, key=lambda k: next(keyiter)) ['D', 'B', 'E', 'C', 'A'] Raymond
From: Steve Howell on 1 Apr 2010 10:59 On Mar 31, 1:09 pm, Raymond Hettinger <pyt...(a)rcn.com> wrote: > On Mar 30, 4:25 pm, s...(a)sig.for.address (Victor Eijkhout) wrote: > > > I have two arrays, made with numpy. The first one has values that I want > > to use as sorting keys; the second one needs to be sorted by those keys.. > > Obviously I could turn them into a dictionary of pairs and sort by the > > first member, but I think that's not very efficient, at least in space, > > and this needs to be done as efficiently as possible. > > Alf's recommendation is clean and correct. Just make a list of > tuples. > > FWIW, here's a little hack that does the work for you: > > >>> values = ['A', 'B', 'C', 'D', 'E'] > >>> keys = [50, 20, 40, 10, 30] > >>> keyiter = iter(keys) > >>> sorted(values, key=lambda k: next(keyiter)) > > ['D', 'B', 'E', 'C', 'A'] > Another option: [values[i] for i in sorted(range(len(keys)), key=lambda i: keys[i])] Sort the indexes according to keys values, then use indexes to get the values. It might read more clearly when broken out into two lines: >>> sorted_indexes = sorted(range(len(keys)), key = lambda i: keys[i]) >>> sorted_indexes [3, 1, 4, 2, 0] >>> [values[i] for i in sorted_indexes] ['D', 'B', 'E', 'C', 'A'] The advantage of Raymond's solution is that he only creates one new Python list, whereas my solutions create an intermediate Python list of integers. I don't think my solution really is that spacewasteful, though, since by the time the second list gets created, any internal intermediate lists from CPython's sorted() implementation will probably have been cleaned up.
First

Prev

Pages: 1 2 Prev: Sometimes the python shell cannot recognize the presence of anattribute. Next: Fetch files from mail in python 