MathGroup Archive 2011

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

Search the Archive

Re: Another AppendTo replacement problem

  • To: mathgroup at smc.vnet.net
  • Subject: [mg118258] Re: Another AppendTo replacement problem
  • From: Bill Rowe <readnews at sbcglobal.net>
  • Date: Mon, 18 Apr 2011 06:50:13 -0400 (EDT)

On 4/17/11 at 7:16 PM, koopman at sfu.ca (Ray Koopman) wrote:

>On Apr 17, 4:51 am, "Sjoerd C. de Vries"
><sjoerd.c.devr... at gmail.com> wrote:
>>The usual trick is to replace AppendTo[list,elem] with list
>>{list,elem}.

>See Maxim Rytin, "Two heads are better than one",
>http://forums.wolfram.com/mathgroup/archive/2006/May/msg00175.html

>The trick he suggests builds just as fast as, and unravels twice as
>fast as, the usual trick.

>Timing[s = {}; Do[s = {s, h[i,-i] }, {i,1*^6}]; Length@s]
>Timing[Length[ss = Flatten@s /. h->List]]

>{4.23 Second,2} {1.82 Second,1000000}

>Timing[z = h[]; Do[z = h[z, {i,-i} ], {i,1*^6}]; Length@z]
>Timing[Length[zz = List @@ Flatten[z,Infinity,h]]]

>{4.25 Second,2} {0.71 Second,1000000}

>zz === ss

>True

The results I get indicate simply using nested lists then using
Partition to reconstruct the array appropriately is faster. That is:

In[1]:= Timing[z = h[]; Do[z = h[z, {i, -i}], {i, 1*^6}]; Length@z]
Timing[Length[zz = List @@ Flatten[z, Infinity, h]]]

Out[1]= {1.6739,2}

Out[2]= {0.622828,1000000}

In[3]:= Timing[s = {}; Do[s = {s, {i, -i}}, {i, 1*^6}]; Length@z]
Timing[Length[ss = Partition[Flatten[s], Length[Last@s]]]]

Out[3]= {1.61893,2}

Out[4]= {0.392044,1000000}

In[5]:= ss == zz

Out[5]= True





  • Prev by Date: Re: SortBy + Sort Strings with apo.marks + CharacterCode
  • Next by Date: Re: Coloring a ListSurfacePlot3D with a n x 4 matrix
  • Previous by thread: Re: Another AppendTo replacement problem
  • Next by thread: Re: Another AppendTo replacement problem