![]() |
MATLAB中的加权随机数
如何从向量a随机选取N个数字,并将权重分配给每个数字?
比方说: a = 1:3; % possible numbers weight = [0.3 0.1 0.2]; % corresponding weights 在这种情况下,拾取1的概率应该比拾取2高3倍。 所有权重的总和可以是任何值。 [B]回答:[/B] R = randsample([1 2 3], N, true, [0.3 0.1 0.2]) [URL="http://www.mathworks.com/help/stats/randsample.html"]randsample[/URL]包含在统计工具箱中 否则,您可以使用某种[URL="http://en.wikipedia.org/wiki/Fitness_proportionate_selection"]轮盘赌选择[/URL]过程。看到这个[URL="https://stackoverflow.com/questions/2140787/select-random-k-elements-from-a-list-whose-elements-have-weights/2151885#2151885"]类似的问题[/URL] (尽管不是特定于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 ) [B]说明:[/B] 考虑间隔[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] [url=https://stackoverflow.com/questions/2977497]更多&回答...[/url] |
所有时间均为北京时间。现在的时间是 01:03。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.