擅长:python、mysql、java
<p>将每个数字除以总数可能无法得到所需的分布。例如,对于两个数字,对x,y=random.random(),random.random()在正方形0<;=x<;1,0<;=y<;1上均匀地拾取一个点。除以从(x,y)到原点的直线x+y=1上的点“投影”之和。接近(0.5,0.5)的点比接近(0.1,0.9)的点可能性大得多。</p>
<p>对于两个变量,x=random.random(),y=1-x沿几何线段给出均匀分布。</p>
<p>使用3个变量,可以在立方体中拾取一个随机点并进行投影(径向投影,穿过原点),但是三角形中心附近的点比顶点附近的点更有可能。结果点位于x+y+z平面上的三角形上。如果需要在三角形中无偏地选择点,缩放就不好。</p>
<p>这个问题在n维变得复杂,但你可以得到一个低精度(但高精度,为所有你的实验室科学爱好者!)从所有n个非负整数的n元组集合中均匀地选取n个整数,然后将每个整数除以n</p>
<p>我最近想出了一个算法来处理中等大小的n,n。它应该对n=100和n=1000000有效,从而给出6位数的随机数。请看我的答案:</p>
<p><a href="https://stackoverflow.com/questions/18448417/create-constrained-random-numbers/18448874#18448874">Create constrained random numbers?</a></p>