MathGroup Archive 2006

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

Search the Archive

Re: Extract values and multilpicities from list

  • To: mathgroup at smc.vnet.net
  • Subject: [mg64943] Re: Extract values and multilpicities from list
  • From: Bill Rowe <readnewsciv at earthlink.net>
  • Date: Wed, 8 Mar 2006 01:00:20 -0500 (EST)
  • Sender: owner-wri-mathgroup at wolfram.com

On 3/7/06 at 6:11 AM, carlw at wolfram.com (Carl K. Woll) wrote:

>For the special case where the integers are positive and not too
>large, then the following approach is probably close to the
>fastest.

>runs[d_] :=
>SparseArray[Transpose[{d, Range[Length[d]]}] -> Table[1,
>{Length[d]}]] /. SparseArray[_, _, _, {_, {p_, __}, _}] :>
>Transpose[{Range[Length[p] - 1], Rest[p] - Most[p]}]

>The simplest solution is probably:

>runs2[d_] := {First[#], Length[#]} & /@ Split[Sort[d]]

>The output of runs will include integers with 0 length runs, so we
>need to eliminate them when comparing results:

>In[22]:= r1=runs[data];//Timing r2=runs2[data];//Timing
>DeleteCases[r1,{_,0}]===r2

>Out[22]= {0.485 Second,Null}

>Out[23]= {0.781 Second,Null}

>Out[24]= True

What can be accomplished using SparseArray seems to me quite amazing. But in this case (on my machine at least) the simpler runs2 executes faster. That is

In[69]:=
RandomSeed[0];
n=100000;
test=Table[Random[Integer,{1,1000}],{n}];
Timing[r1=runs[test];]
Timing[r2=runs2[test];]

Out[72]=
{0.08321 Second,Null}

Out[73]=
{0.072016 Second,Null}
--
To reply via email subtract one hundred and four


  • Prev by Date: Re: mathematica to word
  • Next by Date: Re: Listable functions with two brackets f[][] (SubValues)
  • Previous by thread: Re: Extract values and multilpicities from list
  • Next by thread: Re: Extract values and multilpicities from list