Services & Resources / Wolfram Forums / MathGroup Archive

MathGroup Archive 2008

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

Search the Archive

Ranks for an array of triplets

  • To: mathgroup at
  • Subject: [mg87498] Ranks for an array of triplets
  • From: Claus <clausenator at>
  • 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?


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: Precedence of the \\ and ; operators and RowBoxes generated by the front end
  • Next by Date: Re: A Problem with Simplify
  • Previous by thread: Precedence of the \\ and ; operators and RowBoxes generated by the front end
  • Next by thread: Re: Ranks for an array of triplets