0

我有一个包含不同案例的 excel 文件,每个案例大约有 75 个事件。给定每种情况,每个事件都有发生的概率。所以excel文件是这样的:

       event1  event2 ...   event75    

case1  0.0343  0.0234 ...   0.1194

case2  0.0924  0.0532 ...   0.0023

我想在 python 中生成一个随机数,范围从 0 到 75 以及给定案例的概率。当我处理仅可能发生 2 个事件的案例时,我使用了如下代码:

excel_cases = pd.read_csv('/.../cases.csv')

def event_probabilities(case):
event_probability = excel_cases.loc[excel_cases['Case'] == case, 'event1'].values[0]
return event_probability

event1_probability = event_probabilities("case1")
np.random.choice(np.arange(1, 3), p=[event1_probability, (1 - event1_probability)])
# can also do an event2_probability instead of 1-event1_probability

但是,当事件范围变大时,我不知道什么是更有效的方法。谢谢您的帮助。

*与其他问题不同,因为我从 Excel 中获取概率

4

1 回答 1

0

所以看起来你要精确到小数点后 4 位,对吧?所以你可以做的是得到一个 0 到 9999 之间的随机数:

from random import randint
randomNum = randint(0,9999))

然后将每个概率乘以 10000,并为每个 switch 设置一堆 elif 语句。因此,如果 event_1 的概率为 0.0045,而事件 2 的概率为 0.0100,则 elif 看起来像这样。

if randomNum < 45:
    event_1()
elif randomNum > 45 && randomNum < 145:
    event_2()
..........

等等。这不应该需要尽可能多的随机调用。尽管设置它可能并非易事。

于 2017-05-31T20:55:47.557 回答