Re: Split in Mathematica 2.2

*To*: mathgroup at smc.vnet.net*Subject*: [mg12822] Re: [mg12777] Split in Mathematica 2.2*From*: Andrzej Kozlowski <andrzej at tuins.ac.jp>*Date*: Fri, 12 Jun 1998 04:05:51 -0400*References*: <199806100704.DAA13675@smc.vnet.net.>*Sender*: owner-wri-mathgroup at wolfram.com

> >At 12:04 AM -0700 1998.06.10, Andrzej Kozlowski wrote: >>.. Can anyone suggest a really fast implementation >>of Split that works in version 2.2? > >Here's an emulated Split with speed considerations. Basically, it iterates >through the list, mark down where the boundaries should be, then map Take >to the boundary indexes to obtain the new list. > >split::"usage"= > "split simulates the version 3 build-in function Split. Example: >Split[{1,2,3,4,4,3,2}]"; > >split[li_,fQ_:SameQ]:=Module[{liLength,index,i},liLength=Length at li; >index={};For[i=1,i<liLength,i++, > If[Not@(fQ@@Part[li,{i,i+1}]),index={index,i}]]; >(Take[li,#]&)/@(Transpose[{Flatten[{1,#+1}],Flatten[{#,liLength}]}]&)@ > Flatten at index]; > > >PS for those wondering what happened to my series of Mathematica expositions... I >got extremely busy with work. I will come back to it sometimes in the >future. > > Xah, xah at best.com > http://www.best.com/~xah/PageTwo_dir/more.html > "Perl: all unix's stupidity in one." I think I managed to construct an even faster program which avoids the dreaded For loop: split1[l_]:= Module[{m}, Map[Take[l,#]&, Partition[ Insert[Insert[ Flatten[Position[Partition[l,2,1]/.{x_,y_}/;x=!=y->m,m]],1,1], Length[l],-1],2,1]/.{a_,b_}/;a!=1->{a+1,b}]] Here are some test results (Mathematica 3.01, PowerMac G3 266) In[5]:= w = Table[Random[Integer], {10000}]; In[6]:= Split[w];//Timing Out[6]= {0.25 Second,Null} In[7]:= split[w];//Timing Out[7]= {1.16667 Second,Null} In[8]:= split1[w];//Timing Out[8]= {0.766667 Second,Null} Split is the built in mathematica 3.0 function, split is Xah's function and split1 is my new function. I am relieved; I hate the For loop! Andrzej Dr. Andrzej Kozlowski Professor of Mathematics Toyama International University Toyama, JAPAN http://sigma.tuins.ac.jp/

**References**:**Split in Mathematica 2.2***From:*Andrzej Kozlowski <andrzej@tuins.ac.jp>