3
有限長度N的浮點數(0和1之間)的給定序列表示整數0..N-1上的分佈函數。我們試圖從這個分佈中抽取一個隨機數。一種方法是在[0,1](float)中繪製一個統一的隨機變量,然後計算該數字的逆累積分佈函數。從存儲爲F#中概率序列的離散分佈函數中繪製一個隨機數
如果分佈在陣列中,所述代碼看起來是這樣的:
let matched distribution draw =
let rec matchRest distribution draw start =
if start = Array.length distribution then start-1
else
let left = draw - distribution.[start]
if left <= 0 then start
else matchRest distribution left (start+1)
matchRest distribution draw 0
其中distribution
是分佈函數和draw
是均勻的[0,1]號碼。
如何在分配任何序列時重寫此函數以工作?很明顯,我可以創建一個臨時陣列,但它似乎不是一個優雅的解決方案...
我在想這種方法,但我不認爲你現在的版本是正確的 - 因爲你對所有的索引使用相同的「draw」數量,而它應該會下降。 – Grzenio 2012-07-12 13:10:37
謝謝,我修好了:)。 – pad 2012-07-12 13:14:57