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 2010-03-31 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 space-wasteful, 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 |