Generate a sequence of random numbers that sum up to 1?

Nick Craig-Wood nick at craig-wood.com
Sun Apr 23 01:31:23 EDT 2006


Gerard Flanagan <grflanagan at yahoo.co.uk> wrote:
>  def distribution(N=2):
>      p = [0] + sorted( random.random() for _ in range(N-1) ) + [1]
>      for j in range(N):
>          yield p[j+1] - p[j]
> 
>  spread = list(distribution(10))
> 
>  print spread
>  print sum(spread)

This is simpler, easier to prove correct and most likely quicker.

def distribution(N=2):
    L = [ random.uniform(0,1) for _ in xrange(N) ]
    sumL = sum(L)
    return [ l/sumL for l in L ]

spread = distribution(10)
print spread
print sum(spread)

-- 
Nick Craig-Wood <nick at craig-wood.com> -- http://www.craig-wood.com/nick



More information about the Python-list mailing list