Python3根據基礎概率隨機生成選項


想要實現一個功能:不同事件發生的基礎概率不同,根據基礎概率來隨機生成選項。

比如,北京的秋天有四種狀態,並分別對應一個基礎概率,然后隨機生成某一天的天氣情況。

weatherlist = ['Sunny', 'Cloudy', 'Windy', 'Rainy']
probaslist = [0.30, 0.35, 0.25, 0.1]

實現腳本如下:

import random


def generate_weather(weather_list, probabilities_list):

    if not (0.99999 < sum(probabilities_list) < 1.00001):
        raise ValueError("The probabilities are not normalized!")
    if len(weather_list) != len(probabilities_list):
        raise ValueError("The length of two input lists are not match!")

    random_normalized_num = random.random()  # random() -> x in the interval [0, 1).
    accumulated_probability = 0.0
    for item in zip(weather_list, probabilities_list):
        accumulated_probability += item[1]
        if random_normalized_num < accumulated_probability:
            return item[0]

  

 

測試運行情況:

weatherlist = ['Sunny', 'Cloudy', 'Windy', 'Rainy']
probaslist = [0.30, 0.35, 0.25, 0.1]

output_dict = {}
for x in weatherlist:
    output_dict.update({x: 0})

n = 10000
for i in range(n):
    weather = generate_weather(weatherlist, probaslist)
    output_dict[weather] += 1

percentage_dict = {key: output_dict[key]/n for key in output_dict}
print(output_dict)
print(percentage_dict)

得到的結果為:

{'Sunny': 3033, 'Cloudy': 3466, 'Windy': 2484, 'Rainy': 1017}
{'Sunny': 0.3033, 'Cloudy': 0.3466, 'Windy': 0.2484, 'Rainy': 0.1017}

 模擬生成10000次天氣情況,將各種天氣情況的頻率與初始設置的基礎概率比較,發現結果很吻合。

 

巨人的肩膀:

https://www.cnblogs.com/zmlctt/p/4315783.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM