MathGroup Archive 2008

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Ranks for an array of triplets

Claus wrote:

>I can create an array with x,y,z triplets. x,y are on a regularly spaced 
>raster, z is a RandomReal.
>For sorting the array according to the z values, I found two options, 
>the second of which is significantly faster.
>However, my goal is not to sort, but to calculate the rank of the z 
>value within the triplet.
>For example:
>original array Ar: {0,0,9.8},{0,1,2.3},{1,1,12.6}
>convert to: {0,0,2},{0,1,1},{1,1,3}
Ar[[All,3]] = Ordering@Ordering[Ar[[All,3]]]

will do this, as long as all the z-values are distinct.

Carl Woll
Wolfram Research

>â?? 2.3 is the smallest z-value, hence it gets assigned rank 1
>In my case I can reach this converted array only with extra steps:
>- separating the z-values from Ar,
>- calculating the (standardized) "RanksOfAr",
>- "gluing" the triplets back together.
>Is there a way to to this in one step?
>Here is the mathematica code:
>Make up an array with (x, y) being coordinates and z being a value at 
>that (x, y) location
>Ar = Partition[Flatten[Table[{i, j, k},
>      {i, 1, 10}
>      , {j, 1, 10}
>      , {k, {RandomReal[]}}
>      ]], 3];
>Time two versions of Sorting the array Ar according to z
>Timing[SortBottomAATriples = Sort[Ar, #1[[3]] < #2[[3]] &]];
>sll[ll_, elem_] := ll[[Ordering[ll[[All, elem]]]]]
>Timing[OrdBotAATrip = sll[Ar, 3]];
>Create the Ranks of z at the original position from Ar
>those ranks are scaled between [0, 1]
>RanksOfAr = Ordering[SortBottomAATriples]/Length[SortBottomAATriples];
>Procedure to put it all back together
>x = Ar[[All, 1]];
>y = Ar[[All, 2]];
>FinalAr = Transpose[{x, y, RanksOfAr}] // N;

  • Prev by Date: Re: Documentation - what is the big secret?
  • Next by Date: Re: Re: PolarPlot
  • Previous by thread: Re: Ranks for an array of triplets
  • Next by thread: Re: Ranks for an array of triplets