MathGroup Archive 2007

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

Search the Archive

Re: How to find the index of a maximal element in a list?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg72977] Re: How to find the index of a maximal element in a list?
  • From: Peter Pein <petsie at dordos.net>
  • Date: Sat, 27 Jan 2007 05:57:41 -0500 (EST)
  • References: <epa2rr$iue$1@smc.vnet.net> <epco7n$8cr$1@smc.vnet.net>

Peter Pein schrieb:
> Valter Sorana schrieb:
>> 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.
>>
> 
> Hi Valter,
> 
> if your data is in the range which can be handled by compiled functions, you
> might want to try a compiled Scan[].
> 
> testit[f_, r_: {3,7}]:=
> (SeedRandom[13];
> ((data=Table[Random[],{10^#1}];Timing[f[data]])&)/@(Range@@r));
> 
> testit[Position[#,Max[#],1,1][[1,1]]&]
> Out[2]=
> {{0.    Second, 243},
>  {0.    Second, 5935},
>  {0.062 Second, 72435},
>  {0.312 Second, 238526},
>  {6.797 Second, 5922868}}
> 
> This came to my mind, but it sorts the indices of the list and runs longer:

well due to the limited capacity of my mind, I didn't remember the form
Ordering[list,-1]...
> 
> testit[Last[Ordering[#]]&]
> 
> {{0.    Second, 243},
>  {0.    Second, 5935},
>  {0.046 Second, 72435},
>  {0.625 Second, 238526},
>  {9.172 Second, 5922868}}
> 
...

testit[First[Ordering[#,-1]]&]

{{0.    Second, 243},
 {0.    Second, 5935},
 {0.    Second, 72435},
 {0.015 Second, 238526},
 {0.109 Second, 5922868}}

is of course the fastest known way so far to get the desired result until Carl
Woll finds a better one ;-)

P²


  • Prev by Date: Re: How to find the index of a maximal element in a list?
  • Next by Date: Plotting
  • Previous by thread: Re: How to find the index of a maximal element in a list?
  • Next by thread: Using open brackets