Mathematica 9 is now available
Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2005
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2005

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: easy question about random numbers

  • To: mathgroup at smc.vnet.net
  • Subject: [mg53387] Re: easy question about random numbers
  • From: "Ray Koopman" <koopman at sfu.ca>
  • Date: Sun, 9 Jan 2005 23:03:37 -0500 (EST)
  • References: <crqb7f$cak$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Pedrito wrote:
> Hi everybody!
>
> I wanted to obtain a discrete random number generator that I needed
for
> a project.
>
> On the library Statistics`DiscreteDistributions` I could find the
DiscreteUniformDistribution
> function. But I wanted to specify the probability for each one of the
> states.
>
>
> For instance:
> If we need to simulate an unfair dice, we could have this
probabilities
> for each one of the sides:
> {1/6, 1/6, 1/6, 1/6, 9/60, 11/60}
>
> So I wrote:
> li2 = {1/6, 1/6, 1/6, 1/6, 9/60, 11/60}
> li3=FoldList[Plus,0,li2]
> Module[{i = 1, r = Random[]}, While[ !li3[[i]] < r < li3[[i + 1]],
i++]; i]
>
> It works ok but I don't know if there is another (better) way of
doing
> this.
> Any suggestion?

If, as in your example, all the probabilities in li2 are
ratios of exact integers, then first get

li3 = Flatten@MapIndexed[Table[#2,{#1}]&,li2*LCM@@(1/li2)];
n = Length@li3

Then  li3[[Random[Integer,{1,n}]]]  will return a random integer
from the probability distribution in li2.


  • Prev by Date: MultipleListPlot MakeSymbol Issue
  • Next by Date: Re: easy question about random numbers
  • Previous by thread: Re: easy question about random numbers
  • Next by thread: Re: easy question about random numbers