我有一个元素列表,例如L = [A, B, C]
. 例如,每个元素都有一个相关的分数S = [5, 1, 4]
。
我想根据它在 S 中的分数从 L 中选择一个元素,只需生成一种累积概率分布,其中每个元素L[i]
对应一个与(0,1]
成比例的区间S[i]
。然后,在 (0,1] 中绘制的随机数映射到所选元素。
对于前面给出的示例,我们可以S
通过对 进行归一化来将 的分数表示为概率,然后5+1+4
我们SS = [0.5, 0.1, 0.4]
将 的元素映射L
到区间,这样:
B is mapped to (0, 0.1]
C is mapped to (0.1, 0.1+0.4]
A is mapped to (0.1+0.4, 0.5+0.5]
r
现在,如果我在 (0,1] (eg ) 中生成一个随机数r = random.random()
,它将映射到相应的元素。例如,如果r = 0.03
我们知道元素是 B。例如,如果r = 0.73
我们知道元素是 A .. .
python中是否有一种简单的方法可以在元素和区间之间进行这种映射?
我知道我可以numpy.cumsum
用来生成 SS 的累积和,但是如何将元素映射到从这个累积和获得的区间?