Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2004
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2004

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

Search the Archive

Re: Re: argMax

  • To: mathgroup at smc.vnet.net
  • Subject: [mg51277] Re: [mg51270] Re: argMax
  • From: DrBob <drbob at bigfoot.com>
  • Date: Tue, 12 Oct 2004 01:57:40 -0400 (EDT)
  • References: <ckaj3i$m3r$1@smc.vnet.net> <200410110525.BAA05047@smc.vnet.net>
  • Reply-to: drbob at bigfoot.com
  • Sender: owner-wri-mathgroup at wolfram.com

The dichotomy isn't really one-dimensional versus multi-dimensional, I think; it's values versus positions.

These should work for data of any shape at all:

positions[f_,arglist_List]:=Module[{spectrum=Map[f,arglist,-1]},
     Position[spectrum,Max[spectrum]]]
values[f_,arglist_List]:=Extract[arglist,positions[f,arglist]]

data=Array[Random[Integer,10]&,{10,5}]
values[Identity,data]
positions[Identity,data]

{{9,5,0,5,4},{7,2,3,6,10},{5,3,0,1,10},{10,1,4,1,3},{8,6,4,1,6},{9,0,
     0,7,1},{0,7,9,0,10},{5,8,2,8,8},{0,3,3,7,7},{5,3,9,9,5}}

{10,10,10,10}

{{2,5},{3,5},{4,1},{7,5}}

Bobby

On Mon, 11 Oct 2004 01:25:29 -0400 (EDT), Peltio <peltio at twilight.zone> wrote:

> "Pierre Albarede" wrote
>
>> I miss a fast internal function ArgMax.
> [snip]
>> but this will be much slower that Max. How can I have a faster argMax ?
>
> I've written this without any testing, so I can't tell whether it's faster
> or not than your solution (if it happens to be so, it won't be much faster,
> though).
> You can either have a version of ArgMax that works for onedimensional lists
> giving you a list of the elements that produce a max (you can have more than
> one)...
>
>     ArgMax[f_, arglist_List] :=
>       Module[
>         {spectrum},
>         spectrum = f /@ arglist;
>         Flatten[Take[arglist, #] & /@ Position[spectrum, Max[spectrum]]]
>     ]
>
>
> Or a multidimensional one, that can give you a list of coordinates of the
> points giving you a max.
>
>     ArgMax[f_, arglist_List] :=
>       Module[
>         {spectrum},
>         spectrum = Map[f, arglist, -1];
>         Take[arglist, #] & /@ Position[spectrum, Max[spectrum]]
>     ]
>
> (pattern matching can be adopted to have the proc automatically choose the
> code to be employed).
>
> hope this helps,
> Peltio
> --
> Invalid address in reply-to. Crafty demunging required to mail me.
>
>
>
>
>
>
>



-- 
DrBob at bigfoot.com
www.eclecticdreams.net


  • References:
    • Re: argMax
      • From: "Peltio" <peltio@twilight.zone>
  • Prev by Date: Re: Export with jLink
  • Next by Date: Re: plotting groups of polynomial roots
  • Previous by thread: Re: argMax
  • Next by thread: Re: argMax