Re: List concatenation speed
- To: mathgroup at smc.vnet.net
 - Subject: [mg87612] Re: List concatenation speed
 - From: "jwmerrill at gmail.com" <jwmerrill at gmail.com>
 - Date: Mon, 14 Apr 2008 05:45:25 -0400 (EDT)
 - References: <ftsd1e$bba$1@smc.vnet.net>
 
On Apr 13, 3:34 am, car... 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={};
>      Print[Timing[Do[AppendTo[poly,p],{i,1,n}]]];
>      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?
This may be "cheating", but it's really fast:
 p = Table[x, {50}]; n = 10000;
ClearAll[poly]; poly = {};
Print[Timing[poly = NestList[p &, p, n - 1];]];
{0.007093,Null}
And for comparison:
ClearAll[poly]; poly = {};
Print[Timing[Do[AppendTo[poly, p], {i, 1, n}]]];
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.45663,Null}
{5.4591,Null}
{5.68613,Null}
Regards,
Jason