Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
|
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
如何从向量a随机选取N个数字,并将权重分配给每个数字?
比方说: a = 1:3; % possible numbers weight = [0.3 0.1 0.2]; % corresponding weights 在这种情况下,拾取1的概率应该比拾取2高3倍。 所有权重的总和可以是任何值。 回答: R = randsample([1 2 3], N, true, [0.3 0.1 0.2]) randsample包含在统计工具箱中 否则,您可以使用某种轮盘赌选择过程。看到这个类似的问题 (尽管不是特定于MATLAB的)。这是我的单行实现: a = 1:3; %# possible numbers w = [0.3 0.1 0.2]; %# corresponding weights N = 10; %# how many numbers to generate R = a( sum( bsxfun(@ge, rand(N,1), cumsum(w./sum(w))), 2) + 1 ) 说明: 考虑间隔[0,1]。我们为列表中的每个元素( 1:3 )分配一个与每个元素的重量成比例的长度子区间;因此, 1 get和长度0.3/(0.3+0.1+0.2)间隔,其他都一样。 现在,如果我们生成一个在[0,1]上具有均匀分布的随机数,则[0,1]中的任何数字都具有相等的被拾取概率,因此子间隔的长度确定了随机数落入每个间隔。 这符合我在上面做的事情:选择一个数字X〜U [0,1](更像N数字),然后以向量化的方式找出它属于哪个间隔。 您可以通过生成足够大的序列N=1000来检查上述两种技术的结果: >> tabulate( R ) Value Count Percent 1 511 51.10% 2 160 16.00% 3 329 32.90% 或多或少与归一化权重w./sum(w)匹配[0.5 0.16667 0.33333] 更多&回答... |
![]() |
![]() |