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]]
?
$\begingroup$
$\endgroup$
3
-
2$\begingroup$ Take a look at reference.wolfram.com/mathematica/ref/Ordering.html for the position. $\endgroup$– dr.blochwaveCommented Apr 9, 2014 at 8:55
-
$\begingroup$ @blochwave Yes, thank you, that's what I was looking for. $\endgroup$– GeofCommented Apr 9, 2014 at 9:00
-
$\begingroup$ Related: (900), (1342), (2177) $\endgroup$– Mr.WizardCommented Apr 9, 2014 at 9:57
Add a comment
|
1 Answer
$\begingroup$
$\endgroup$
7
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]]}]
Ordering
is much faster.
-
$\begingroup$ Why can't we just write
Position[exampleList,Max[exampleList]]
? Sorry, I wrote that just as you were posting this answer. $\endgroup$– GeofCommented Apr 9, 2014 at 8:56 -
$\begingroup$ @Geof: Well, for one thing, that's incomplete. The first argument to
Position
is the target list, andMax
does not return a list... $\endgroup$– ciaoCommented Apr 9, 2014 at 8:57 -
$\begingroup$ OK, I like the use of Ordering here, that's what I was after! $\endgroup$– GeofCommented Apr 9, 2014 at 8:58
-
$\begingroup$ Sorry, that was a typo, I fixed the comment. I meant, why can't "(#==Max[list]&)" just be "Max[exampleList]"? $\endgroup$– GeofCommented Apr 9, 2014 at 8:58
-
$\begingroup$ @geof: you can, I'm just in the habit of having complex functions there... $\endgroup$– ciaoCommented Apr 9, 2014 at 8:59