Re: List concatenation speed

• To: mathgroup at smc.vnet.net
• Subject: [mg87581] Re: List concatenation speed
• From: Szabolcs Horvát <szhorvat at gmail.com>
• Date: Mon, 14 Apr 2008 05:39:31 -0400 (EDT)
• Organization: University of Bergen
• References: <ftsd1e\$bba\$1@smc.vnet.net>

```carlos at colorado.edu wrote:
> I am building mesh plots that require concatenation of thousands of
> Graphics objects into one list for Show[].  This is done by appending
> objects as they are created, and there are several ways to do that.
> Tested 3 of them for speed using a simple object:
>
>      p=Table[x,{50}]; n=10000;
>      ClearAll[poly]; poly={};

If you set poly = {}, then ClearAll is not necessary here.

>      Print[Timing[Do[AppendTo[poly,p],{i,1,n}]]];

Print[] is not necessary here.  Do not use the semicolon at the end.

>      ClearAll[poly]; poly={};
>      Print[Timing[Do[poly=Append[poly,p],{i,1,n}]]];
>      ClearAll[poly]; poly={};
>      Print[Timing[Do[poly=Join[poly,{p}],{i,1,n}]]];
>
> {5.8395 Second,Null}
> {5.7206 Second,Null}
> {6.29728 Second,Null}
>
> Tests were run on version 5.2 on a G5 desktop Mac. I expected Join to
> win,
> but it didnt.  Is there a faster way?
>

Yes, there is, but it involves using a slightly different algorithm.
The problem is that you are thinking in a procedural way here: you
assign a value to a variable, and change its value in a loop.
Assignment and appending to lists are slow in Mathematica because they
involve copying the whole data structure.  Try to avoid this.

I'd use

In[1]:=
p = Table[x, {50}]; n = 10000;
Table[p, {n}]; // Timing

Out[2]= {0., Null}

which is much-much faster.  It is not even necessary to use Join or
Append.  If you need the sublists joined together, then use

Join @@ Table[p, {n}]

This will produce a flat list of 'x' symbols.  Generally, you can build
up a list of lists first, and Join[] or Flatten[] them in the end.

I hope this helps,
Szabolcs

```

• Prev by Date: Re: Re: Player Pro and Packages
• Next by Date: Re: waiting for pressed key and reading key
• Previous by thread: Re: List concatenation speed
• Next by thread: Re: List concatenation speed