【发布时间】:2018-08-05 20:43:15
【问题描述】:
假设我有一个项目数组[1,2, ...n] 和一个概率数组[p1,p2,....,pn],其中n 是一个非常大的数字,可能达到数千。所有概率之和等于 1。
我需要每次随机选择3个唯一的项目,概率高的项目被选中的机会更高。
我需要进行超过 20k 次的选择。
我通过创建一个新数组来实现一种工作方法,该数组包含基于概率重复的项目。例如,如果 item1、item2 和 item3 的概率分别为[2/n,4/n,1/n],那么新数组将包含[1,1,2,2,2,2,3]。
它工作正常,但效率不高。另外,使用这种方法有可能多次选择同一个项目,然后我必须重新选择另一个耗费时间的项目。
MATLAB 中是否有任何有效的方法或内置函数可用于此目的?
【问题讨论】:
-
我认为这回答了你的问题:stackoverflow.com/a/13914141/1011724
-
同样对于 pick without replacement 问题,如果
n很大并且您只选择 3 个值,您可能只想检查重复项并在找到时重新选择. -
您为项目指定概率,但您还希望不替换进行抽样。有了这两个要求,似乎很难避免重新挑选。例如,
randsample可以处理任一要求,但不能同时处理这两个要求。另请注意,在您当前的方法中,如果采样值不是唯一的,您应该重新开始并重新选择所有项,否则无法保证概率 -
这不是链接问答的欺骗,因为这里没有替换要求
标签: matlab random probability