做到这一点的最好方法是简单地列出你想要的数字,然后将它们全部除以总和。他们以这种方式完全随机。
r = [ran.random() for i in range(1,100)]
s = sum®
r = [ i/s for i in r ]
或者,正如@TomKealy 所建议的那样,将总和和创建保持在一个循环中:
rs = []
s = 0
for i in range(100):
r = ran.random()
s += r
rs.append®
为了获得最快的性能,请使用 numpy :
import numpy as np
a = np.random.random(100)
a /= a.sum()
你可以给随机数任何你想要的分布,一个概率分布:
a = np.random.normal(size=100)
a /= a.sum()
---- 时间 —-
In [52]: %%timeit
…: r = [ran.random() for i in range(1,100)]
…: s = sum®
…: r = [ i/s for i in r ]
…:
1000 loops, best of 3: 231 µs per loop
In [53]: %%timeit
…: rs = []
…: s = 0
…: for i in range(100):
…: r = ran.random()
…: s += r
…: rs.append®
…:
10000 loops, best of 3: 39.9 µs per loop
In [54]: %%timeit
…: a = np.random.random(100)
…: a /= a.sum()
…:
10000 loops, best of 3: 21.8 µs per loop