efficiency of Function
- To: mathgroup@smc.vnet.net
- Subject: [mg11414] efficiency of Function
- From: Xah Lee <xah@best.com>
- Date: Thu, 12 Mar 1998 01:32:18 -0500
This message is a question on the efficiency of Mathematica's Function. -- The following test shows that Function that uses Slot as its formal parameters are significantly faster than explicit naming of its formal parameters. i.e. Function[Slot[1]^2] is faster than Function[{x},x^2]. In[67]:= n=10000; In[68]:= Timing@Do[Function[x,List[x,x]][2],{n}] Timing@Do[Function[List[x],List[x,x]][2],{n}] Timing@Do[Function[List[Slot[1],Slot[1]]][2],{n}] Out[68]= {1.08333 Second,Null} Out[69]= {1.01667 Second,Null} Out[70]= {0.416667 Second,Null} If there are many formal parameters, explicit naming slows it down significantly. In[71]:= n=10000; In[72]:= Timing@Do[Function[List[a,b,c,d,e],List[a,b,c,d,e]][1,2,3,4,5],{n}] Timing@Do[ Function[List[Slot[1],Slot[2],Slot[3],Slot[4],Slot[5]]][1,2,3,4,5],{n}] Out[72]= {1.96667 Second,Null} Out[73]= {0.616667 Second,Null} This shows that the speed difference stick with the function. In[74]:= Clear[n,f1,f2]; n=10000; f1=Function[List[a,b,c,d,e],List[a,b,c,d,e]]; f2=Function[List[Slot[1],Slot[2],Slot[3],Slot[4],Slot[5]]]; In[75]:= Timing@Do[f1[1,2,3,4,5],{n}] Timing@Do[f2[1,2,3,4,5],{n}] Out[75]= {2.15 Second,Null} Out[76]= {0.666667 Second,Null} My question is: why the speed difference stick with the function? I assume that functions with identical behaviors should be identical internally too. (theoretically, of course) Is this something we can expect improvement, or are there situations where f1 and f2 behaves differently? (or are there subtle situations where constructs using Slot and explicit naming can effect the meaning of the function?) Xah, xah@best.com http://www.best.com/~xah/PageTwo_dir/more.html "Unix, C, csh, C++, Perl,... passing the torch of brain-damaged tradition."