21

We can use Max[exampleList] or Min[exampleList] to find the maxima and minima of exampleList, however, is there a similar standalone function that returns something like {position in array, maximum value in the array} or {position in array, minimum value in the array}, i.e. both the position and value of the maximum or minimum element in exampleList? It seems awkward to have to write Position[exampleList,Max[exampleList]] or Position[exampleList,Min[exampleList]]?

Geof
  • 221
  • 1
  • 2
  • 4

1 Answers1

32
Position[list,_?(#==Max[list]&)]

or shorter (per your comment...)

Position[list,Max[list]]

will do the trick, obviously change Max to Min for minimum...

Or, as suggested in comments

Ordering[list,1]
Ordering[list,-1]

Will give positions of minimum and maximum, respectively.

Computation times

order[n_] := Block[{},
  list = RandomReal[1, n];
  t1 = (Position[list, Min@list]; // RepeatedTiming // First);
  t2 = (Ordering[list, 1]; // RepeatedTiming // First);
  {{n, t1}, {n, t2}}]
tab = ParallelTable[order[Floor[1.1^n]], {n, 1, 100, 1}];
ListLogLogPlot[{tab[[All, 1]], tab[[All, 2]]}]

enter image description here

Ordering is much faster.

And R
  • 472
  • 3
  • 9
ciao
  • 25,774
  • 2
  • 58
  • 139
  • Why can't we just write Position[exampleList,Max[exampleList]]? Sorry, I wrote that just as you were posting this answer. – Geof Apr 09 '14 at 08:56
  • @Geof: Well, for one thing, that's incomplete. The first argument to Position is the target list, and Max does not return a list... – ciao Apr 09 '14 at 08:57
  • OK, I like the use of Ordering here, that's what I was after! – Geof Apr 09 '14 at 08:58
  • Sorry, that was a typo, I fixed the comment. I meant, why can't "(#==Max[list]&)" just be "Max[exampleList]"? – Geof Apr 09 '14 at 08:58
  • @geof: you can, I'm just in the habit of having complex functions there... – ciao Apr 09 '14 at 08:59
  • I added a comparison of computation times, hope you don't mind. – anderstood Mar 28 '18 at 01:32
  • This solution does not seem to work correctly when precision numbers are involved, see my question https://mathematica.stackexchange.com/q/265106/45020. Any thoughts? – Kvothe Mar 14 '22 at 11:13