4
$\begingroup$

I often have to find ranks of values in a list. However, Mathematica does not have built-in functions for that, or may be I'm just not aware of them. I can easily find ranks of a row/column vector. For example, if I have

list1 = RandomInteger[{1, 10}, 10] ; 

then Ordering[Ordering[list1]] gives me its rank. I have also written a following function that does my job.

 Rankme[list_] := Module[{rank}, rank = ConstantArray[0, Length[list]]; rank[[Ordering[list]]] = Range[1, Length[list]] ; rank ] 

Rankme[list1] gives me ranks of values in the list1 . However, I am trying to find column-wise ranks of a list that has more than one column. For example, I have

list2 = RandomInteger[{1, 10}, {10, 5}]; 

I want to find column-wise ranks of values in the list2. How can I do this?

$\endgroup$

2 Answers 2

4
$\begingroup$
rrF = Ordering@Ordering@# &; crF = Transpose[rrF /@ Transpose[#]] &; mat = RandomInteger[{1, 10}, {10, 5}]; Row[MatrixForm /@ {mat, crF@mat}] 

enter image description here

Update: Using the function colMap suggested by @Mr.Wizard in the comments

colMap[f_][m_?MatrixQ] := (f /@ (m\[Transpose]))\[Transpose] (* or Transpose[fn /@ Transpose[m]] *) colMap[rrF][mat] // MatrixForm 

gives same output as crF@mat above.

$\endgroup$
4
  • $\begingroup$ Thank you kguler. May be I owe you a couple of cups of coffee. $\endgroup$ Commented Feb 10, 2015 at 22:08
  • $\begingroup$ incidentally consider a reusable function colMap[fn_][m_?MatrixQ] := (fn /@ (m\[Transpose]))\[Transpose] (+1) $\endgroup$ Commented Feb 10, 2015 at 22:08
  • $\begingroup$ ramesh, my pleasure. One cup -quad espresso- would be fine:) $\endgroup$ Commented Feb 10, 2015 at 22:12
  • $\begingroup$ @Mr.Wizard, great idea, thank you. Will update with the colMap function. $\endgroup$ Commented Feb 10, 2015 at 22:13
1
$\begingroup$
Ordering /@ Transpose[RandomVariate[UniformDistribution[{10}], {3, 4}]] 
$\endgroup$
2
  • $\begingroup$ Thank you for your quick response. It was easy. $\endgroup$ Commented Feb 10, 2015 at 22:01
  • $\begingroup$ If it doesn't give you what you want, please explain why. $\endgroup$ Commented Feb 10, 2015 at 22:35

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.