Re: local variables - Module, For loop
- To: mathgroup at smc.vnet.net
- Subject: [mg113072] Re: local variables - Module, For loop
- From: Patrick Scheibe <pscheibe at trm.uni-leipzig.de>
- Date: Tue, 12 Oct 2010 04:30:05 -0400 (EDT)
Hi, usually you want to create/process a list inside a loop and need the return= ed list of Table. If you don't, just put a semicolon at the end. But when you need the values= , then you need to store it explicitely inside a for-loop. For instance Block[{i, result == {}}, For[i == 1, i <== 100, i++, AppendTo[result, {i, PrimeQ[i]}] ]; result ] to check the first 100 numbers to be prime. Table syntax: Table[{i, PrimeQ[i]}, {i, 100}] Check the timing of a For loop with the first 30000 numbers gives First@AbsoluteTiming@Block[{i, result == {}}, For[i == 1, i <== 30000, i++, AppendTo[result, {i, PrimeQ[i]}] ]; result ] 22 Seconds here. Similar Table syntax for the first 1000000 (!!) numbers gi= ves First@AbsoluteTiming@Table[{i, PrimeQ[i]}, {i, 1000000}] 0.65 Seconds. Or you want to iterate some calculation: AbsoluteTiming@Block[{i, c == 0.4 + 0.3 I}, For[i == 0, i < 1000000, i++, c == c^2 + 0.1 - 0.2 I ]; c ] gives 3.19 seconds here and the equivalent Nest syntax AbsoluteTiming@Nest[#^2 + 0.1 - 0.2 I &, 0.4 + 0.3 I, 1000000] needs 0.13 seconds.. And so on, and so on.. Just try to avoid the usual loops and use the rich set of list operations a= vailable. Cheers Patrick On Oct 11, 2010, at 1:05 PM, Sebastian Schmitt wrote: > Hi Patrick! > > Thanks for the suggestion. Does this scale to nested or very "long" For > loops? The Table will return a List in any case: > > In[7]:== Table[, {i, 0, 10}] > > Out[7]== {Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, \ > Null} > > Cheers, > > Sebastian > > Patrick Scheibe wrote: >> Hi, >> >> then use Table, which is "more natural" and doesn't set the iterations v= ariable. >> >> x == 10; >> Table[Print[i], {i, 0, x}]; >> >> Cheers >> Patrick >> >> On Oct 11, 2010, at 11:15 AM, Sebastian Schmitt wrote: >> >>> Dear all! >>> >>> (I recycle my disclaimer.) >>> >>> I'm new to Mathematica with a background mostly in C++. Many times I >>> have the impression that my style is not natural-Mathematica >>> (Mathematicaesque so to say). >>> >>> If I have a For loop in a function like this: >>> >>> In[39]:== f[x_] :== Module[{}, >>> For[i == 0, i !== x, i++, >>> Print[i] >>> ] >>> ] >>> >>> In[41]:== f[2] >>> >>> During evaluation of In[41]:== 0 >>> >>> During evaluation of In[41]:== 1 >>> >>> In[42]:== i >>> >>> Out[42]== 2 >>> >>> I was surprised to find "i" being not local to the For loop. Do I have >>> to keep track of all my throw-away-variables and put them in the list o= f >>> local variables of the Module? I find it pretty tedious. Is there a >>> better way? >>> >>> Thanks in advance, >>> >>> Sebastian >>> >> >> >