python - How to sort a list based on the output of numpy's argsort function -


i have list this:

 mylist = [10,30,40,20,50] 

now use numpy's argsort function indices sorted list:

import numpy np = np.argsort(mylist) 

which gives me output:

array([0, 3, 1, 2, 4]) 

when want sort array using so works fine:

myarray = np.array([1,2,3,4,5]) myarray[so] array([1, 4, 2, 3, 5]) 

but when apply list, not work throws error

mylist2 = [1,2,3,4,5] mylist2[so] 

typeerror: integer arrays 1 element can converted index

how can use so sort list without using for-loop , without converting list array first?

you can't. have convert array back.

mylistsorted = list(np.array(mylist)[so]) 

edit: ran benchmarks comparing numpy way list comprehension. numpy ~27x faster

>>> timeit import timeit >>> import numpy np  >>> mylist = list(np.random.rand(100)) >>> = np.argsort(mylist) #converts list numpy internally >>> timeit(lambda: [mylist2[i] in so]) 12.29590070003178  >>> myarray = np.random.rand(100) >>> = np.argsort(mylist) >>> timeit(lambda: a[o])  0.42915570305194706 

Comments

Popular posts from this blog

Fail to load namespace Spring Security http://www.springframework.org/security/tags -

sql - MySQL query optimization using coalesce -

unity3d - Unity local avoidance in user created world -