Re: Re: Counting Runs
- To: mathgroup at smc.vnet.net
- Subject: [mg52229] Re: [mg52194] Re: Counting Runs
- From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Date: Mon, 15 Nov 2004 03:17:43 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
Actually, this is not a very good test, since unpacking a large array
also takes a non-negligible amount of time. The real effect should be
somewhat larger.
Andrzej
On 15 Nov 2004, at 16:54, Andrzej Kozlowski wrote:
>>> I think Abs, Tr, and BitXor are very fast because they are probably
>>> optimized for integer input and the use of packed arrays.
>>
>> I don't think an optimization for integers can be effective if
>> functions take time to CHECK whether the array contains only
>> integers. Is that precomputed for packed arrays, somehow?
>>
>> Bobby
>
>
> Yes, that's precisely what packed arrays do. Actually you can check
> precisely the effect of packed arrays in this case:
>
>
> << "Developer`"
>
>
> runs[int_, data_] := Module[{modlist},
> modlist = Sign[Abs[data - int]];
> Tr[BitXor[modlist, RotateRight[modlist]]]/2 + 1 -
> BitOr[modlist[[1]], modlist[[-1]]]]
>
>
> runs1[int_, data_] :=
> Module[{modlist, dt = FromPackedArray[data]},
> modlist = FromPackedArray[Sign[Abs[dt - int]]];
> Tr[BitXor[modlist, RotateRight[modlist]]]/2 + 1 -
> BitOr[modlist[[1]], modlist[[-1]]]]
>
>
> seq = Table[Random[Integer, 10], {10^6}];
>
>
> Timing[runs[3, seq]]
>
>
> {0.4299999999999997*Second, 83183}
>
>
> Timing[runs1[3, seq]]
>
>
> {0.9299999999999997*Second, 83183}
>
> So just over 50% performance increase.
>
>
> Andrzej Kozlowski
> Chiba, Japan
> http://www.akikoz.net/~andrzej/
> http://www.mimuw.edu.pl/~akoz/
>