算法——按概率大小对事件进行排序

来源:互联网 发布:东北财经大学网络教学 编辑:程序博客网 时间:2024/05/21 07:14

问题描述

假设现在有多个事件x1,x2,x3,x4,x5,x6,并且事件发生的概率已知:0.3,0.2,0.5,0.4,0.3,0.7。现在我们希望根据事件的概率大小(有小到大)对事件进行排序。

首先我们把事件数值化为1,2,3,4,5,6,我们令x=[1,2,3,4,5,6],令p=[0.3,0.2,0.5,0.4,0.6,0.7],那么我们想要得到的结果是z=[2,1,4,3,5,6]

算法

  • 可以对p进行排序得到每个元素对应的序号(从0开始),得到y=[1,0,3,2,4,5]
  • 然后按序号值由小到大的顺序取得序号值对应的位置,比如值为0的元素对应的位置为1,得到index=[1,0,3,2,4,5](这个刚好就是y);
  • index中的元素值作为下标取x中的元素,得到z=[2,1,4,3,5,6]

这个算法非常巧妙:概率对应的序号y就是对应事件的索引index。

实现

#python>>>import numpy as np>>>x = np.array([1,2,3,4,5,6])>>>p = np.array([0.3,0.2,0.5,0.4,0.6,0.7])>>>y = np.argsort(p)>>>x[y]array([2, 1, 4, 3, 5, 6])
阅读全文
0 0
原创粉丝点击