Re: How to find the index of a maximal element in a list?
- To: mathgroup at smc.vnet.net
- Subject: [mg72955] Re: How to find the index of a maximal element in a list?
- From: "Mark Westwood" <markc.westwood at gmail.com>
- Date: Fri, 26 Jan 2007 07:06:35 -0500 (EST)
- References: <epa2rr$iue$1@smc.vnet.net>
Hi Victor
No, off the top of my head I couldn't think of a neater way of doing
this, but I'm not sure that I am or should be bothered. I created a
randomly ordered list of the first 500000 integers, and used your
approach to find the position of the maximum element. Fast enough for
my purposes
In[10]:=list3=RandomPermutation[500000];
In[11]:=Timing[Position[list3,Max[list3]]]
Out[11]={0.094 Second,{{180740}}}
Why do you think that this approach traverses the list twice ? I could
write it in Fortran with a single traversal of the list, something like
this (WARNING: untested code follows):
integer, dimension(500000) :: alist
maxelement = alist(1)
maxelement_location = 1
do i = 2, size(alist)
if (alist(i) > maxelement) then
maxelement = alist(i) ! not required if you're
only looking for a position
maxelement_location = i
end if
end do
Of course, if I was writing it in Fortran I'd use the maxloc intrinsic
...
Regards
Mark Westwood
On 25 Jan, 11:04, Valter Sorana <vsor... at yahoo.com> 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.