随机模拟中经常出现的一个问题是计算几个事件中的哪个发生。这通常是通过每个事件的概率来实现的。然后生成一个随机数,然后遍历可能的事件,直到找到它们的概率之和超过随机数的地方。你知道吗
这是我想要的代码,但我正在寻找更好的方法。你知道吗
import random
def getEvent(eventProbabilities,probability):
S = 0
for key in eventProbabilities.keys():
S += eventProbabilities[key]
if S>= probability: #key is the event to happen.
break
return key
x = {'event1' : 0.1 , 'event2' : 0.2 , 'event3' : 0.2 , 'event4' : 0.4, 'event5' : 0.1} #values sum to 1.
p = random.random() #random number between 0 and 1.
event = getEvent(x,p)
print p, event
我觉得应该有一种更简洁的方法来定义getEvent—可能是使用takewhile
—但是我找不到它。你知道吗
我追求的是最高效率,因为我认为这是我的代码将花费大部分时间的地方。你知道吗
有没有一种方法可以通过itertools(或其他方式)提高效率?你知道吗
在下面添加编辑,评论我们是否关心迭代顺序。
您将注意到这些键将按某种顺序进行处理。这个顺序与随机数p无关。让我们考虑这样的情况,它按照我列出的顺序处理它们。如果p<=0.1
,那么它将返回event1
,因此有10%的可能性是event1。如果0.1<p<0.3
它将返回event2
(所以有20%的概率)。现在让我们考虑一个不同的顺序。假设它的顺序相反。在这种情况下,如果0.9<p
,我们得到event1
(10%),而如果0.7<p<=0.9
,我们得到event2
(20%)。所以每个事件的概率是相同的,不管顺序如何。你知道吗
我只想选择一个事件,我想用相应的概率选择那个事件。你知道吗
如果我理解正确,您只需要从列表中以给定的概率选择一个元素。为什么不使用
numpy
?你知道吗相关问题 更多 >
编程相关推荐