Re: Trying to speed up a function
- To: mathgroup at smc.vnet.net
- Subject: [mg91844] Re: Trying to speed up a function
- From: dh <dh at metrohm.ch>
- Date: Wed, 10 Sep 2008 05:07:32 -0400 (EDT)
- References: <g9t6jq$j66$1@smc.vnet.net>
Hi Abhishek, no mistery here. By definition Table[expr,{n}] completely evaluates expr n times. Therefore, it is a good idea to take out redundant calculations. Note also that Table has the attribute "HoldAll" and does therefore not evaluate its arguments. Daniel gophergoon at gmail.com wrote: > Say I have a previously defined matrix 'vecs' and I want to calculate > certain sums of columns. I find it easier to write in terms of the > Transpose but it seems that when I put Transpose[vecs] in the > definition of a table, mathematica evaluates the transpose over and > over to get at every element of the matrix. Which takes much longer > than doing it in 2 steps (2nd method). I only found this out by trial > and error so I am curious about the explanation for this behaviour and > how to avoid it in general. > > BTW I am aware that the expression can be written in 1 line without > using Transpose also, but I'd still like to know how to tell that if a > sub-expression in a function is going to be evaluated repeatedly. > Thanks, > Abhishek > > In[15]:= Dimensions[vecs] > > Out[15]= {1620, 1620} > > In[23]:= Table[Total[Transpose[vecs][[n]][[811 ;; 1620]]], {n, 1, > 1620}]; // Timing > > Out[23]= {27.844, Null} > > In[24]:= vecst = Transpose[vecs]; > Table[Total[vecst[[n]][[811 ;; 1620]]], {n, 1, 1620}]; // Timing > > Out[25]= {0.016, Null} > -- Daniel Huber Metrohm Ltd. Oberdorfstr. 68 CH-9100 Herisau Tel. +41 71 353 8585, Fax +41 71 353 8907 E-Mail:<mailto:dh at metrohm.com> Internet:<http://www.metrohm.com>