[Numpy-discussion] A newbie question: How to get the "rank" of an 1-d array

CL anewgene at gmail.com
Mon Mar 27 11:25:11 EST 2006


Thanks, Tim. Your function of "listrank" is indeed equivalent with mine. 
My typical vector size is 150K and there are thousands of such vectors 
need to be processed. I think the performace would be boosted if there 
is any way other than pure python fucntion "listrank".

Thanks again,

CL

Tim Hochberg wrote:

> CL wrote:
>
>> Hi, group,
>>           I need to get the "rank" of an 1-D array (ie. a vector). 
>> Note that "rank" here is not the value returned from "rank(a_array)". 
>> It is the order of the item in its sorted arrray. For example, I have 
>> a python function called "listrank" to return the "rank" as below:
>
>
> In the future, please include the relevant function. This saves us (me 
> anyway) time reverse engineering said function from the description 
> you give. Is the function below equivalent to your listrank function?
>
>        def listrank(v):
>            rank = {}
>            for i, x in enumerate(reversed(sorted(v))):
>                if x not in rank:
>                    rank[x] = i
>            return [rank[x]+1 for x in v]
>
>>
>> In [19]: x
>> Out[19]: array([1, 2, 5, 3, 3, 2])
>>
>> In [20]: listrank(x)
>> Out[20]: [6, 4, 1, 2, 2, 4]
>>
>> Somebody suggested me to use "argsort(argsort(x))". But the problem 
>> is it does not handle ties. See the output:
>>
>> In [21]: argsort(argsort(x))
>> Out[21]: array([0, 1, 5, 3, 4, 2])
>>
>> I am wondering if there is a solution in numpy/numarray/numeric to 
>> get this done nicely.
>
>
> Unfortunately, nothing comes to mind immediately. This kind of 
> problem, where the values at one index depend on the values at a 
> different index is often hard to deal with in the array framework. How 
> large of vectors are you typically dealing with? If they are not 
> extremely large or this isn't a performance critical a python solution 
> like above, possibly somewhat optimized, may well be sufficient.
>
> Perhaps someone else will come up with something though.
>
> Regards,
>
> -tim
>
>
>
>
>
> -------------------------------------------------------
> This SF.Net email is sponsored by xPML, a groundbreaking scripting 
> language
> that extends applications into web and mobile media. Attend the live 
> webcast
> and join the prime developer group breaking into this new coding 
> territory!
> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
> _______________________________________________
> Numpy-discussion mailing list
> Numpy-discussion at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/numpy-discussion
>





More information about the NumPy-Discussion mailing list