Gerard Flanagan wrote: > Gerard Flanagan wrote: > > Anthony Liu wrote: > > > I am at my wit's end. > > > > > > I want to generate a certain number of random numbers. > > > This is easy, I can repeatedly do uniform(0, 1) for > > > example. > > > > > > But, I want the random numbers just generated sum up > > > to 1 . > > > > > > I am not sure how to do this. Any idea? Thanks. > > > > > > > -------------------------------------------------------------- > > import random > > > > def partition(start=0,stop=1,eps=5): > > d = stop - start > > vals = [ start + d * random.random() for _ in range(2*eps) ] > > vals = [start] + vals + [stop] > > vals.sort() > > return vals > > > > P = partition() > > > > intervals = [ P[i:i+2] for i in range(len(P)-1) ] > > > > deltas = [ x[1] - x[0] for x in intervals ] > > > > print deltas > > > > print sum(deltas) > > --------------------------------------------------------------- > > > > def partition(N=5): > vals = sorted( random.random() for _ in range(2*N) ) > vals = [0] + vals + [1] > for j in range(2*N+1): > yield vals[j:j+2] > > deltas = [ x[1]-x[0] for x in partition() ] > > print deltas > > print sum(deltas) >
finally: --------------------------------------------------------------- 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) --------------------------------------------------------------- Gerard -- http://mail.python.org/mailman/listinfo/python-list