Re: For Loop and Array related

*To*: mathgroup at smc.vnet.net*Subject*: [mg58006] Re: For Loop and Array related*From*: "Carl K. Woll" <carlw at u.washington.edu>*Date*: Thu, 16 Jun 2005 05:36:09 -0400 (EDT)*Organization*: University of Washington*References*: <d8oucl$t6q$1@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

<mchangun at gmail.com> wrote in message news:d8oucl$t6q$1 at smc.vnet.net... > 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. > Here's how I would approach this. Create a table of your random integers: data = Table[Random[Integer, {1, 100}], {16000}]; Then, the following function will create your lattice: rand[d_] := Normal[SparseArray[#[[All, 1]] -> Length /@ #, 100]] &[Split@Sort@d] Apply the function rand to your data: lattice=rand[data]; Check: In[20]:= Total[lattice] Dimensions[lattice] Out[20]= 16000 Out[21]= {100} Carl Woll Wolfram Research