我希望生成一个大小为N的列表,比如说,我有m个唯一元素{v1,v2,…,vm,我可以确定确实存在v1发生的v1,Np2出现v2。。。,Npmvm,其中p1+p2+。。。+p3=1。在
作为一个具体的例子,我想生成一个随机的10个元素的列表,其中1出现的几率为20%,2的出现率为30%,3的出现率为50%。以下列表是可以接受的随机生成的列表:
L1 = [1,3,2,1,3,3,3,2,3,2]
L2 = [3,3,3,1,2,1,3,3,2,2]
如果我的输入是一个元组列表,其中包含(值,概率)对和N,即要生成的列表的长度,那么我正在寻找最通用的python方法来实现这一点。 e、 g.对于上述情况:
^{pr2}$
构建列表,然后使用
random.shuffle()
使其随机。例如:或者,作为列表理解:
^{pr2}$结果:
注意:因为您指定的是概率,这最多将产生结果
prob * num
个结果。。。因为如果不是整数,它会去掉分数:丢失项有50%的几率是}。所以有一个警告。在
2
或{要解释这一损失,您必须选择:
添加随机加权缺失项的示例:
计算每个元素所需的数量。 创建一个包含您需要的所有元素的列表。 洗牌。例如:
结合创作序列。。。在
^{pr2}$输出:
补丁
为了保证列表的长度合适,我们可以采取一种低思想的方法:生成除最后一项之外的所有内容,然后用最后一项填充列表的其余部分。TemporalWolf提出的解决方案总体上是比较好的,但这个方案适用于大多数应用。在
如果N太低,而且很多频率都是0,我们仍然会遇到麻烦。如果最后一个项目的频率较低,而其他项目的汇总次数很多,则此操作也可能失败:如果列表已经太长,则此操作将失败。在
相关问题 更多 >
编程相关推荐