Re: Timing of looping operators
- To: mathgroup at smc.vnet.net
- Subject: [mg62445] Re: Timing of looping operators
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Thu, 24 Nov 2005 06:33:45 -0500 (EST)
- Organization: The Open University, Milton Keynes, UK
- References: <dm1cum$jp7$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
dh wrote: > Hello, > The Mathematica gospel tells you that you should NOT use loops because > it is inefficient. > Well consider the following examples and their times: > > n=10^6; > d=Table[i,{i,n}]; > fun[x_]:=x; > > a) Timing[fun & /@ d;] needs 0.8 sec > b) Timing[Scan[fun, d]] needs 1 second > c) Timing[Do[f[i], {i, n}];] needs 0.7 sec ==== must be fun[i] > > a) applies the function and creates a new list. b) does not create a new > list -- but it is slower! And finally c) the loop is fastest!!! > > If you change the function to: f[x_]:=x^2, the times are even more striking: > > 0.8, 2.4, 0.7 > it seems like in a and c the function evaluation takes negliable time > compared to the loop construct, but not so in b. > > has anybody an explanation??? > > Daniel > Hi Daniel, in (c) your function must be fun[i0 rather than f[i]. Here what I get in bot cases (identity and square): the loop is systematically the slowest... and pure functions are the fastest, which is no surprise according to Mathematica gospel :-) In[1]:= n = 10^6; d = Table[i, {i, n}]; fun[x_] := x; In[4]:= Timing[(#1 & ) /@ d; ] Out[4]= {0.109 Second,Null} In[5]:= Timing[Scan[#1 & , d]; ] Out[5]= {0.781 Second,Null} In[6]:= Timing[Scan[fun, d]; ] Out[6]= {0.954 Second,Null} In[7]:= Timing[fun /@ d; ] Out[7]= {0.968 Second,Null} In[8]:= Timing[Do[fun[i], {i, n}]; ] Out[8]= {1.188 Second,Null} In[9]:= fun2[x_] := x^2; In[10]:= Timing[(#1^2 & ) /@ d; ] Out[10]= {2.172 Second,Null} In[11]:= Timing[Scan[#1^2 & , d]; ] Out[11]= {2.094 Second,Null} In[12]:= Timing[Scan[fun2, d]; ] Out[12]= {2.359 Second,Null} In[13]:= Timing[fun2 /@ d; ] Out[13]= {2.328 Second,Null} In[14]:= Timing[Do[fun2[i], {i, n}]; ] Out[14]= {2.609 Second,Null} In[15]:= $Version Out[15]= 5.2 for Microsoft Windows (June 20, 2005) Best regards, /J.M.