Ranks for an array of triplets
- To: mathgroup at smc.vnet.net
- Subject: [mg87498] Ranks for an array of triplets
- From: Claus <clausenator at gmail.com>
- Date: Fri, 11 Apr 2008 05:57:59 -0400 (EDT)
- Organization: Comp.Center (RUS), U of Stuttgart, FRG
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} â?? 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;
- Follow-Ups:
- Re: Ranks for an array of triplets
- From: Darren Glosemeyer <darreng@wolfram.com>
- Re: Ranks for an array of triplets
- From: "W_Craig Carter" <ccarter@mit.edu>
- Re: Ranks for an array of triplets
- From: Carl Woll <carlw@wolfram.com>
- Re: Ranks for an array of triplets
- From: Sseziwa Mukasa <mukasa@jeol.com>
- Re: Ranks for an array of triplets