Re: For Loop and Array related

*To*: mathgroup at smc.vnet.net*Subject*: [mg58016] Re: [mg57971] For Loop and Array related*From*: János <janos.lobb at yale.edu>*Date*: Thu, 16 Jun 2005 05:36:54 -0400 (EDT)*References*: <200506150958.FAA29716@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

On Jun 15, 2005, at 5:58 AM, mchangun at gmail.com wrote: > Hi All, > > I have an array with 100 elements, all set to zero initially. Then I > want to randomly choose one element and increase its value by one, and > repeat this 16000 times. Here is my code: > > Lattice = Table[0, {n, 100}]; > For[i = 1, i = 16000, i++, Lattice[[Random[Integer, {1, 100}]]]++] > > So now if I add all the elements in the list Lattice together, I > should > get 16000 (I use Total[Lattice] to get the sum of the list). But this > doesn't happen, and strangely, each time I run this, the sum of the > list is different! What am I doing wrong? > > Also I'm aware that a lot of Mathematica newbies try and write code > like it were C++ and I think i've fallen into this trap as well. > So is > there a different (more Mathematica) way which I can implement the > above? > > Thanks in advanced. > Looks to me that the Increment operator has problems here. I modified your program for a While. In[152]:= i = 0; n = 100; s = 160; lattice = Table[0, {j, n}]; While[i++ <= s, lattice[[Random[Integer, {1, 100}]]]++; Print[i]; Print[ Total[lattice]]; Print[Tr[lattice]]; Print[Sum[lattice[[k]], {k, 1, n}]]; Print[i - Tr[lattice]]; Print["-----"]; ]; When I run this, the Total, Tr and Sum all agree. However Print[i - Tr[lattice]]; clearly show that sometimes no increment takes place and sometimes it is incremented with more than just one. If I re-write the lattice[[Random[Integer, {1, 100}]]]++; the old fashion way: r = Random[Integer, {1, 100}]; lr = lattice[[r]]; lr = lr + 1; lattice[[r]] = lr; than it works fine. János In[171]:= $Version Out[171]= "5.1 for Mac OS X (October \ 25, 2004)" -------------------------------------------- f @@ # & /@ === f @@@

**References**:**For Loop and Array related***From:*"mchangun@gmail.com" <mchangun@gmail.com>