Re: Question about RandomInteger
- To: mathgroup at smc.vnet.net
- Subject: [mg83198] Re: Question about RandomInteger
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Wed, 14 Nov 2007 04:54:39 -0500 (EST)
- Organization: The Open University, Milton Keynes, UK
- References: <fhbo7s$rba$1@smc.vnet.net>
John wrote: > Needs["MultivariateStatistics`"] > n=1000 > pdpd={1/6,1/6,1/6,1/6,1/6,1/6} > pdid={1/7,1/5,1/6,1/6.1/6,33/210} -----------------------^ Syntax error: must be a comma here. > u=RandomInteger[MultinomialDistribution[n,pdpd],1] > v=RandomInteger[MultinomialDistribution[n,pdid],1] > > All of the above works. > > But u and v appear more than once in subsequent calculations, and By that, do you mean just u and v, or their definitions too? > RandomInteger reexecutes at each appearance. The reexecutions change > the values of u and v, and that is not what I want to happen. Hum, if the code you posted is really the code used in your application, first it has a syntax error, second, as written, the values of u and v cannot change. Why? Because you have used Set, i.e. =, which evaluates the right-hand side (RHS) immediately and only once, whereas SetDelayed, i.e. :=, does not evaluate the RHS immediately but does so whenever the left-hand side (LHS) is called subsequently. You can see what is going on in the example below: u and v are defined with Set whereas uu and vv are defined with SetDelayed. When call ten times, you can check that the values of u and v are always the same contrary to those of uu and vv that change at every call. Therefore, either the actual code use SetDelayed or the definition of u and v occurs in several places. In[1]:= Needs["MultivariateStatistics`"] n = 1000 pdpd = {1/6, 1/6, 1/6, 1/6, 1/6, 1/6} pdid = {1/7, 1/5, 1/6, 1/6, 1/6, 33/210} u = RandomInteger[MultinomialDistribution[n, pdpd], 1] v = RandomInteger[MultinomialDistribution[n, pdid], 1] Out[2]= 1000 Out[3]= {1/6, 1/6, 1/6, 1/6, 1/6, 1/6} Out[4]= {1/7, 1/5, 1/6, 1/6, 1/6, 11/70} Out[5]= {{163, 183, 178, 163, 158, 155}} Out[6]= {{137, 206, 170, 148, 165, 174}} In[7]:= Table[{u, v}, {10}] Out[7]= {{{{163, 183, 178, 163, 158, 155}}, {{137, 206, 170, 148, 165, 174}}}, {{{163, 183, 178, 163, 158, 155}}, {{137, 206, 170, 148, 165, 174}}}, {{{163, 183, 178, 163, 158, 155}}, {{137, 206, 170, 148, 165, 174}}}, {{{163, 183, 178, 163, 158, 155}}, {{137, 206, 170, 148, 165, 174}}}, {{{163, 183, 178, 163, 158, 155}}, {{137, 206, 170, 148, 165, 174}}}, {{{163, 183, 178, 163, 158, 155}}, {{137, 206, 170, 148, 165, 174}}}, {{{163, 183, 178, 163, 158, 155}}, {{137, 206, 170, 148, 165, 174}}}, {{{163, 183, 178, 163, 158, 155}}, {{137, 206, 170, 148, 165, 174}}}, {{{163, 183, 178, 163, 158, 155}}, {{137, 206, 170, 148, 165, 174}}}, {{{163, 183, 178, 163, 158, 155}}, {{137, 206, 170, 148, 165, 174}}}} In[8]:= uu := RandomInteger[MultinomialDistribution[n, pdpd], 1] vv := RandomInteger[MultinomialDistribution[n, pdid], 1] In[10]:= Table[{uu, vv}, {10}] Out[10]= {{{{169, 164, 174, 175, 166, 152}}, {{126, 204, 158, 184, 184, 144}}}, {{{166, 171, 156, 177, 163, 167}}, {{153, 197, 162, 169, 174, 145}}}, {{{197, 166, 161, 162, 153, 161}}, {{128, 184, 163, 183, 177, 165}}}, {{{163, 167, 168, 184, 147, 171}}, {{162, 183, 155, 169, 147, 184}}}, {{{179, 153, 183, 160, 163, 162}}, {{140, 201, 157, 169, 172, 161}}}, {{{155, 165, 168, 173, 160, 179}}, {{137, 213, 170, 143, 172, 165}}}, {{{159, 168, 158, 163, 171, 181}}, {{138, 185, 175, 180, 170, 152}}}, {{{183, 164, 147, 186, 169, 151}}, {{156, 206, 166, 163, 165, 144}}}, {{{175, 170, 146, 155, 175, 179}}, {{135, 184, 170, 180, 175, 156}}}, {{{164, 171, 145, 164, 181, 175}}, {{143, 182, 162, 190, 162, 161}}}} Regards, -- Jean-Marc