MathGroup Archive 2007

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

Search the Archive

Re: RE: Re: question in mathematica


Harvey P. Dale wrote:

>Here's another way:
>
>
>
>maxlst[l_List] := Module[{l2 = l, i, len}, i = 2; len = Length[l2];
>While[i <= len, l2[[i]] = Max[l2[[i]], l2[[i-1]]]; i++];
>Transpose[Tally[l2]][[1]]]
>  
>
A slight refinement of this idea for number data:

maxlst2[l_List] := Union[ FoldList[Max, First@l, Rest@l] ]

In my tests with long lists, maxlst2 is about an order of magnitude 
faster. If the data can have stuff like E and Pi, then one should use 
Tally[ ... ][[All,1]] instead of Union[ .. ].

Carl Woll
Wolfram Research

>
>
>ls={9,2,10,3,14,9}
>
>
>
>maxlst[ls]
>
>
>
>{9,10,14}
>
>
>
>            Best,
>
>
>
>            Harvey
>
>
>
>Harvey P. Dale
>
>University Professor of Philanthropy and the Law
>
>Director, National Center on Philanthropy and the Law
>
>New York University School of Law
>
>Room 206A
>
>110 West 3rd Street
>
>New York, N.Y. 10012-1074
>
>tel: 212-998-6161
>
>fax: 212-995-3149
>
>
>
>________________________________
>
>From: m.r at inbox.ru [mailto:m.r at inbox.ru]
>Sent: Monday, August 13, 2007 4:42 AM
>To: mathgroup at smc.vnet.net
>Subject: [mg80148] [mg80143] Re: question in mathematica
>
>On Aug 11, 1:43 am, Andrzej Kozlowski <a... at mimuw.edu.pl> wrote:
>  
>
>>First, please send such question to the MathGroup,
>>
>>mathgr... at smc.vnet.net
>>
>>not me personally. (I really have desire, tiem or ability to replace
>>the enitre MathGroup.)
>>So I have decided to post this question to the MathGroup in case
>>someone else finds it interesting.
>>
>>Also, there is something about this question and the earlier you sent
>>me that make sme suspicious.  What do you say "you need to use
>>recursion and pattern matching, Select and Join"? This sounds to me
>>like some sort of test problem so I have decided to answer it but
>>without using any of these functions (although it may not be the
>>simplest way to do this). So here is my answer:
>>
>>  ls = {9, 2, 10, 3, 14, 9};
>>
>>Reverse[Last[Last[Reap[NestWhile[With[{a = First[Ordering[#, -1]]},
>>Sow[#[[a]]]; Take[#, a - 1]] &,ls,Length[#] > 0 &]]]]]
>>
>>{9, 10, 14}
>>
>>On 10 Aug 2007, at 10:12, Ivan Egorov wrote:
>>
>>    
>>
>>>I have one more question.
>>>      
>>>
>>>Write a function maxima[lis_List] which, given a list of numbers,
>>>produces a list of those
>>>      
>>>
>>>numbers greater than all those that precede them. For example
>>>      
>>>
>>>maxima[{ 9, 2, 10, 3, 14, 9}] returns { 9, 10, 14}. You need to use
>>>recursion, pattern matching,
>>>      
>>>
>>>Select and Join.
>>>      
>>>
>>>=E2=80=8E
>>>      
>>>
>
>I'll make it easier for myself and use pattern matching:
>
>In[1]:= ReplaceList[{9, 2, 10, 3, 14, 9},
>  {s___, x_, ___} /; Max[s] < x :> x]
>
>Out[1]= {9, 10, 14}
>
>Maxim Rytin
>m.r at inbox.ru
>
>  
>



  • Prev by Date: Re: A different font size for each line in PlotLabel
  • Next by Date: Re: Complexity explosion in linear solve
  • Previous by thread: RE: Re: question in mathematica
  • Next by thread: Re: Re: question in mathematica