Python帶權重隨機數的簡單實現
- 2020 年 1 月 10 日
- 筆記
該方法是常用的帶權重隨機數生成方法,思路是先將權重值求和total,在0與權重和total之間獲得一個隨機數rd,遍歷權重字典,累加其權重值weight_sum, 當rd小於或等於weight_sum時,返回當前的權重key值,示例程式碼如下:
import random def random_weight(weight_data): _total = sum(weight_data.values()) # 權重求和 _random = random.uniform(0, _total) # 在0與權重和之前獲取一個隨機數 _curr_sum = 0 _ret = None try: _keys = weight_data.iterkeys() # 使用Python2.x中的iterkeys except AttributeError: _keys = weight_data.keys() # 使用Python3.x中的keys for _k in _keys: _curr_sum += data[_k] # 在遍歷中,累加當前權重值 if _random <= _curr_sum: # 當隨機數<=當前權重和時,返回權重key _ret = _k break return _ret
轉入值是一個字典,key為要獲得的隨機數據,key為其權重,如{'a': 10, 'b': 15, 'c': 50}