產生隨機數求和到預定義值
在這種情況下,我們的目標是產生一個偽隨機數列表,這些偽隨機數共同添加直至特定的預定值。一種方法是隨機產生指定範圍內的數字,將其從總數中減去,然後重複此過程,直到總和等於所需值。然而,這種方法在對總和的貢獻方面有利於第一個產生的數字。
為了確保一致性,開發了更複雜的解決方案:
import random
def constrained_sum_sample_pos(n, total):
"""Return a randomly chosen list of n positive integers summing to total.
Each such list is equally likely to occur."""
dividers = sorted(random.sample(range(1, total), n - 1))
return [a - b for a, b in zip(dividers [total], [0] dividers)]
此方法產生總和為目標值的正整數清單。關鍵概念是每種可能的數字組合都有相同的可能性產生。此外,將此技術擴展到不同的總和和不同數量的隨機數非常簡單。
例如,如果我們將 n 設為 4,總計設為 40,我們可能會獲得以下輸出:[4, 4, 25 ,7]。需要注意的是,此清單中的每個元素相加後都會產生預定義值 40。
為了允許非正整數,可以進行修改:
def constrained_sum_sample_nonneg(n, total):
"""Return a randomly chosen list of n nonnegative integers summing to total.
Each such list is equally likely to occur."""
return [x - 1 for x in constrained_sum_sample_pos(n, total n)]
透過將每個值加一,我們可以產生一個非負整數列表,這些整數加起來等於所需的總數。
此方法可確保每種可能的組合,無論數字是正數或非負數,都有相同的生成機率。憑藉其用戶友好的實現和跨不同場景的多功能性,constrained_sum_sample_pos 和 constrained_sum_sample_nonneg 已成為 Python 中隨機數生成任務不可或缺的一部分。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3