擅长:python、mysql、java
<p>最好的方法是简单地列出你想要的数字,然后把它们全部除以和。它们完全是随机的。</p>
<pre><code>r = [ran.random() for i in range(1,100)]
s = sum(r)
r = [ i/s for i in r ]
</code></pre>
<p>或者,按照@TomKealy的建议,将总和和创建保持在一个循环中:</p>
<pre><code>rs = []
s = 0
for i in range(100):
r = ran.random()
s += r
rs.append(r)
</code></pre>
<p>要获得最快的性能,请使用<code>numpy</code>:</p>
<pre><code>import numpy as np
a = np.random.random(100)
a /= a.sum()
</code></pre>
<p>对于概率分布,可以给随机数任何分布:</p>
<pre><code>a = np.random.normal(size=100)
a /= a.sum()
</code></pre>
<p>----时间----</p>
<pre><code>In [52]: %%timeit
...: r = [ran.random() for i in range(1,100)]
...: s = sum(r)
...: 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(r)
....:
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
</code></pre>