Re: Ranks for an array of triplets
- To: mathgroup at smc.vnet.net
- Subject: [mg87551] Re: [mg87498] Ranks for an array of triplets
- From: Carl Woll <carlw at wolfram.com>
- Date: Sat, 12 Apr 2008 07:03:38 -0400 (EDT)
- References: <200804110957.FAA08413@smc.vnet.net>
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? > >Thanks, >Claus > >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; > >
- References:
- Ranks for an array of triplets
- From: Claus <clausenator@gmail.com>
- Ranks for an array of triplets