从具有给定概率的阵列中随机选择而不进行替换

userInThisWorld

假设我有一个item[1,2, ...n]数组[p1,p2,....,pn]一个probability array ,其中的n个数很大,可能达到数千个。所有概率的总和等于1。

  • 我每次需要随机选择3个唯一的项目,一个可能性较高的项目被选择的可能性更高。

  • 我需要进行超过2万次的选择。

我通过创建一个新的数组实现了一种工作方法,该数组包含基于项目概率的重复项。例如,如果item1,item2和item3的概率[2/n,4/n,1/n]分别为,则新数组将包含[1,1,2,2,2,2,3]

它工作正常,但效率不高。同样,使用这种方法有可能多次选择同一项目,然后我不得不重新选择另一个耗时的项目。

MATLAB中是否有用于此目的的有效方法或内置函数?

沃尔菲

您的初始数组

 x = [1, 2, 3];   % 1:n, where n = 3
 p = [2, 4, 1]/7; % probabilities of choosing each element

您可以使用以下方式选择具有给定概率的元素:

 r = rand; % get random number in range (0,1)
 xi = x(find(cumsum(p) >= r, 1)); % Get x where cumulative probability >= random number

您想选择而不替换,所以让我们在每个循环中删除该元素

k = 2;           % number of choices
r = rand(k,1);   % random numbers
xi = zeros(k,1); % output choices
for ii = 1:k     % choices loop
    % Choose x with probability of each element contained in p
    idx = find(cumsum(p) >= r(ii), 1);
    xi(ii) = x(idx);
    % Remove item from lists
    x(idx) = []; p(idx) = [];
    % Rescale probabilities
    p = p/sum(p);
end

使用此方法,x相对于它们自己的指定p,重复条目将被视为独立条目

注意:如果要执行此选择N时间,请使用一些临时变量xp变量,以便下次进行选择时,不会删除某些元素!甚至更好,vectorise选择循环,使xpN×n,从各行每次移除元素。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

具有给定概率的切片/阵列中的Golang选择数

有效选择具有给定概率的随机矩阵索引

生成具有替换的随机(相等概率)组合

具有概率的随机函数

在 Excel 中创建具有给定概率的动态数组

C#中具有概率的随机数

从TensorFlow中的给定非均匀分布中进行替换而不进行采样

我想从列表中随机选择项目,然后将它们添加到另一个列表中而不进行替换

从给定概率的有限选项集中选择伪随机

是否所有数字都具有从随机排列中选择的相等概率?

有条件概率的随机选择

JAVA:随机产生具有概率的整数

python:具有概率的随机样本

具有不同概率的随机抽样

如何根据给定的熊猫概率随机选择一行

具有预定义概率的c#订单的无状态随机选择

动态数组中的概率随机选择

从概率矩阵中做出随机选择

在R中生成随机整数对而不进行替换

Haskell中具有给定种子的随机数质量

Python中具有给定PDF的随机数

如何在python中以给定的概率生成随机整数?

嵌套for循环以生成R中具有不同概率的随机变量

随机排列数组,同时使每个索引在任何索引中具有相同的概率

为R中的每一行生成具有不同概率的随机数

Javascript纸牌游戏-随机选择后替换阵列项目

从具有一定概率的数组中选择随机项目,然后将其添加到阶段

具有给定最大值的离散概率分布

创建具有左偏概率分布的随机数