MathGroup Archive 1992

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

Search the Archive

Re: timing of Table operation


Jeff MacKie-Mason (jmm at umich.edu) asked about the explanation 
for timing differences between two versions of Table-generating 
code:

>     In[2]:= rdist = NormalDistribution[(1.1^(1/240)-1),(0.2/240)]
>
>     Out[2]= NormalDistribution[0.000397205, 0.000833333]
>
>     In[3]:= annualReturns=Timing[Table[
>                (Product[
>                       (1+Table[Random[rdist],{240}][[i]]),
>                       {i,1,240}
>                       ] - 1),
>               {1}
>              ]]
>
>     Out[3]= {312.933 Second, {0.109928}}
>
>     In[4]:= y = Timing[Table[Random[rdist],{240}]][[2]]
>
>     Out[4]= {-0.000684265,  < list of 240 numbers suppressed> }
>
>     In[5]:= Timing[Product[(1+y[[i]]),{i,1,240}]-1]
>
>     Out[5]= {0.266667 Second, 0.114892}
>
>     So, the nested Tables took 5 minutes, the direct (two-step) 
>     approach less than 0.3 seconds.

Don't forget that Product is a looping construct as well. In the 
nested version, the Table[Random[rdist],{240}] is executed 240 
times! In other words, 240 separate tables of random numbers are 
generated, and one number (the i'th) is picked from each for the 
accumulating Product. This is just the classic optimization of taking 
invariant code (the Table) out of a loop.

--Todd Gayley
--University of Arizona





  • Prev by Date: Re: MMA/PostScript/Textures
  • Next by Date: [no subject]
  • Previous by thread: Plotting curves using different markers
  • Next by thread: [no subject]