[Date Index]
[Thread Index]
[Author Index]
Re: Re: Counting Runs
*To*: mathgroup at smc.vnet.net
*Subject*: [mg52000] Re: [mg51934] Re: [mg51890] Counting Runs
*From*: DrBob <drbob at bigfoot.com>
*Date*: Sat, 6 Nov 2004 02:09:03 -0500 (EST)
*References*: <200411040650.BAA18131@smc.vnet.net> <200411050717.CAA06890@smc.vnet.net> <opsg0lmi1fiz9bcq@monster.cox-internet.com> <opsg0pe8woiz9bcq@monster.cox-internet.com> <D9733954-2F93-11D9-85F1-000A95ED10EE@yale.edu>
*Reply-to*: drbob at bigfoot.com
*Sender*: owner-wri-mathgroup at wolfram.com
I've updated my notebook again, under the Run Counts link at:
http://eclecticdreams.net/DrBob/mathematica.htm
I'm not sure whether solver performance depends mostly on the number of runs, or the number of different values in a data list. The two are somewhat inversely related, of course.
The fastest solvers are brt4 (using Frequencies) and hanlonTreat (hanlon3, with Part instead of Map).
Bobby
On Fri, 5 Nov 2004 20:33:23 -0500, János <janos.lobb at yale.edu> wrote:
> It must be machine or OS dependent.
>
> I re-discovered Hanlon3 method :) and ran it with Bobby's newest. I
> don't have Bobby's data so I generated random didgits in the 0-9 range
>
> Here are the results:
>
> In[28]:=
> v = Table[Random[Integer,
> {0, 9}], {i, 1, 10^7}];
>
> In[29]:=
> Timing[({First[#1],
> Length[#1]} & ) /@
> Split[Sort[First /@
> Split[v]]]]
> Out[29]=
> {35.58*Second, {{0, 898901},
> {1, 899397}, {2, 901191},
> {3, 899449}, {4, 900824},
> {5, 900262}, {6, 899338},
> {7, 900293}, {8, 900196},
> {9, 901311}}}
>
> In[32]:=
> Timing[({First[#1],
> Length[#1]} & ) /@
> Split[Sort[Split[v][[All,
> 1]]]]]
> Out[32]=
> {38.67999999999998*Second,
> {{0, 898901}, {1, 899397},
> {2, 901191}, {3, 899449},
> {4, 900824}, {5, 900262},
> {6, 899338}, {7, 900293},
> {8, 900196}, {9, 901311}}}
>
> My machine is a 1.25Ghz G4 with 2G Ram and with OSX 10.3.5.
>
> János
> On Nov 5, 2004, at 7:38 PM, DrBob wrote:
>
>> I found an even faster (rather obvious) solution:
>>
>> hanlonTreat[v_] := {First@#, Length@#} & /@ Split@Sort[Split[v][[All,
>> 1]]]
>>
>> It about 80% faster than hanlon4.
>>
>> Bobby
>>
>> On Fri, 05 Nov 2004 17:16:56 -0600, DrBob <drbob at bigfoot.com> wrote:
>>
>>> I timed the posted methods except Andrzej's -- it's the only one that
>>> works only for +1/-1 data -- plus a couple of my own that I haven't
>>> posted. David Park's method seems the same as the fastest method,
>>> hanlon3. I modified all methods to return a pair {x, number of runs
>>> in x} for each x in the data.
>>>
>>> Two of Bob Hanlon's methods beat all the rest of us -- but one of his
>>> is the slowest method, too.
>>>
>>> I've posted a notebook at the Run Counts link at:
>>>
>>> http://eclecticdreams.net/DrBob/mathematica.htm
>>>
>>> Bobby
>>>
>>> On Fri, 5 Nov 2004 02:17:54 -0500 (EST), Selwyn Hollis
>>> <sh2.7183 at misspelled.erthlink.net> wrote:
>>>
>>>> Hi Greg,
>>>>
>>>> The following seems to work pretty well:
>>>>
>>>> runscount[lst_?VectorQ] :=
>>>> Module[{elems, flips, counts},
>>>> elems = Union[lst];
>>>> flips = Cases[Partition[lst, 2, 1], {x_, y_} /; x =!= y];
>>>> counts = {#, Count[Most[flips], {#, _}]} & /@ elems;
>>>> {x1, x2} = Last[flips];
>>>> counts /. {{x1, y_} -> {x1, y+1}, {x2, y_} -> {x2, y+1}}]
>>>>
>>>> Example:
>>>>
>>>> Table[Random[Integer, {1, 5}], {20}]
>>>> runscount[%]
>>>>
>>>> {2, 2, 3, 1, 3, 2, 2, 3, 1, 1, 2, 3, 1, 1, 3, 1, 1, 2, 2, 2}
>>>>
>>>> {{1, 4}, {2, 4}, {3, 5}}
>>>>
>>>>
>>>> -----
>>>> Selwyn Hollis
>>>> http://www.appliedsymbols.com
>>>> (edit reply-to to reply)
>>>>
>>>>
>>>> On Nov 4, 2004, at 1:50 AM, Gregory Lypny wrote:
>>>>
>>>>> Looking for an elegant way to count runs to numbers in a series.
>>>>> Suppose I have a list of ones and negative ones such as
>>>>> v={1,1,1,-1,1,1,1,1,1,-1,-1,-1,-1,1}.
>>>>> I'd like to create a function that counts the number of runs of 1s
>>>>> and
>>>>> -1s, which in this case is 3 and 2.
>>>>>
>>>>> Greg
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>
>>
>>
>> --
>> DrBob at bigfoot.com
>> www.eclecticdreams.net
>>
>>
>
> -------------------------------------------------------------------
> János Löbb
> Yale University School of Medicine
> Department of Pathology
> Phone: 203-737-5204
> Fax: 203-785-7303
> E-mail: janos.lobb at yale.edu
>
>
>
>
--
DrBob at bigfoot.com
www.eclecticdreams.net
Prev by Date:
**Re: Re: Counting Runs**
Next by Date:
**Re: MathGroup /: Descriptive headings**
Previous by thread:
**Re: Re: Counting Runs**
Next by thread:
**Re: Re: Re: Counting Runs**
| |