Re: Re: Counting Runs
- To: mathgroup at smc.vnet.net
- Subject: [mg52231] Re: [mg52194] Re: Counting Runs
- From: DrBob <drbob at bigfoot.com>
- Date: Mon, 15 Nov 2004 20:56:45 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
That seems to prove only that there's an optimization for packed arrays -- not for integer input. Am I missing something? Bobby On Mon, 15 Nov 2004 16:54:37 +0900, Andrzej Kozlowski <akoz at mimuw.edu.pl> 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/ > > > > -- DrBob at bigfoot.com www.eclecticdreams.net