Generate a sequence of random numbers that sum up to 1?
Anthony Liu
antonyliu2002 at yahoo.com
Sat Apr 22 00:49:06 EDT 2006
OK, I actually just want to "manually" create Hidden
Markov Models by randomly generating the initial state
probabilities PI, the transition probabilities A and
the emission probabilities B, instead of learning such
statistics from a corpus. They have to be subject the
constraint that
sum(PI) = 1.0
sum(each row of A) = 1.0
sum(each row of B) = 1.0
Got an idea?
Thank you for your help. I guess I can use random()
instead of uniform(0,1) given your comments about
uniform. I did not know the uniform function until a
moment ago when I checked the python.org
documentation.
As a matter of fact, given that we have to specify the
number of states for an HMM, I would like to create a
specified number of random floating numbers whose sum
is 1.0.
--- Edward Elliott <nobody at 127.0.0.1> wrote:
> Anthony Liu wrote:
> > But, I want the random numbers just generated sum
> up
> > to 1 .
>
> This seems like an odd request. Might I ask what
> it's for?
>
> Generating random numbers in [0,1) that are both
> uniform and sum to 1 looks
> like an unsatisfiable task. Each number you
> generate restricts the
> possibilities for future numbers. E.g. if the first
> number is 0.5, all
> future numbers must be < 0.5 (indeed, must *sum* to
> 0.5). You'll end up
> with a distribution increasingly skewed towards
> smaller numbers the more
> you generate. I can't imagine what that would be
> useful for.
>
> If that's not a problem, do this: generate the
> numbers, add them up, and
> divide each by the sum.
>
> nums = [random.uniform(0,1) for x in range(0,100)]
> sum = reduce(lambda x,y: x+y, nums)
> norm = [x/sum for x in nums]
>
> Of course now the numbers aren't uniform over [0,1)
> anymore.
>
> Also note that the sum of the normalized numbers
> will be very close to 1,
> but slightly off due to representation issues. If
> that level of accuracy
> matters, you might consider generating your rands as
> integers and then
> fp-dividing by the sum (or just store them as
> integers/fractions).
> --
> http://mail.python.org/mailman/listinfo/python-list
>
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
More information about the Python-list
mailing list