2009-05-03 85 views

回答

6

如果你下載NumPy包,它有一個函數numpy.random.triangular(left,mode,right [,size]),它完全符合你的要求。

4

由於,我是從Python 2.4中檢查隨機的文檔,我錯過此:

random.triangular(低,高,模式)¶ 返回一個隨機浮點數N,使得低< = N < =高,並在這些邊界之間指定模式。低限和高限默認爲零和1。 mode參數默認爲邊界之間的中點,給出對稱分佈。 版本2.6中的新功能

+0

對於大多數使用情況來說,這可能是比公認的更好的答案。雖然這個API與NumPy有不同的順序,但這有點令人煩惱! – 2016-04-04 15:51:40

2

假設您的發行版不是由NumPy或Python標準庫處理的。

在性能不是非常重要的情況下,拒絕抽樣對於從您沒有使用的分配中獲取抽獎是一種有用的方法。

爲了您的三角形分佈,你可以不喜歡

from random import random, uniform 

def random_triangular(low, high, mode): 
    while True: 
     proposal = uniform(low, high) 
     if proposal < mode: 
      acceptance_prob = (proposal - low)/(mode - low) 
     else: 
      acceptance_prob = (high - proposal)/(high - mode) 
     if random() < acceptance_prob: break 
    return proposal 

您可以繪製一些樣品

pylab.hist([random_triangular(1, 6, 5) for t in range(10000)]) 

,以確保一切正常。

+0

尼斯通用暗示!對於OP,這裏的想法是將均勻度與期望分佈的密度相關聯。 – 2012-01-01 20:49:02