Re: How to find the index of a maximal element in a list?
- To: mathgroup at smc.vnet.net
- Subject: [mg72947] Re: [mg72911] How to find the index of a maximal element in a list?
- From: János <janos.lobb at yale.edu>
- Date: Fri, 26 Jan 2007 06:34:29 -0500 (EST)
- References: <200701251119.GAA19752@smc.vnet.net>
On Jan 25, 2007, at 6:19 AM, Valter Sorana wrote:
> I may have a mental block, but I cannot find anything better than
>
> Position[listName,Max[listName]]
>
> that traverses the list twice - once to find the maximum and once
> to find where it is.
>
> Isn't there a way to get both the index and the max value in one go?
>
> (of course one could write a loop that does this, but I want to
> avoid loops)
>
> Thanks,
>
> Valter.
Well, my newbie instinct says that
Ordering[listName,-1]
might be your best bet.
In[1]:=
lst = Table[Random[Integer,
{1, 10^7}], {i, 1,
10^6}];
In[2]:=
Timing[Position[lst,
Max[lst]]]
Out[2]=
{0.4704309999999996*Second,
{{653015}}}
In[3]:=
Timing[Last[Last[First[
Last[Reap[a = -1; i = 1;
Scan[(If[#1 >= a,
a = #1; Sow[{a,
i}], Null];
i++; ) & ,
lst]; ]]]]]]
Out[3]=
{8.194379000000001*Second,
653015}
In[4]:=
Timing[Ordering[lst, -1]]
Out[4]=
{0.02305199999999985*Second,
{653015}}
János
----------------------------------------------
Trying to argue with a politician is like lifting up the head of a
corpse.
(S. Lem: His Master Voice)
- References:
- How to find the index of a maximal element in a list?
- From: Valter Sorana <vsorana@yahoo.com>
- How to find the index of a maximal element in a list?