MATLAB-如何随机选择具有更高概率的较小值?

问题描述 投票:0回答:1

我有一个列向量“距离”,我想从这个向量中随机选择一个值,使得较小的值具有较高的被选择概率。到目前为止,我使用以下内容,其中“possible_cells”是随机选择的值:

w=(fliplr(1:numel(distances)))/100
possible_cells=randsample((sort(distances)),1,true,w)

基本上,我翻转距离向量以创建选择“w”的概率(如果我正确理解randsample),以便最小值具有被选中的概率等于最高值。为了检查其工作情况,我随机抽取50个值,并使用直方图,我看到值高于我的预期。有没有人知道如何做我上面描述的事情? 0评论

matlab random
1个回答
1
投票

这样的事怎么样?

让我们从10个样本距离开始,长度不超过20只是为了演示:

d = randi(20,10,1);

接下来,由于我们希望更小的值更有可能,让我们采用这些距离的倒数:

d_rec = 1./d;

现在,让我们进行规范化,这样我们就可以创建一个分布来选择我们的距离:

d_rec_norm = d_rec ./ sum(d_rec);

这个新变量反映了选择每个给定距离的概率。现在来了一个小技巧...我们选择这样的距离:

d_i = find(rand < cumsum(d_rec_norm),1);

这将为我们提供所选距离的索引。这背后的逻辑是,当累计求和与每个距离相关的归一化值(d_rec_norm)时,我们创建“宽度”,其宽度与选择每个距离的可能性成比例。剩下的就是选择0到1之间的随机数(rand)并查看它所属的“bin”。

我是这里的新海报,所以如果不清楚我可以告诉我,我可以尝试改进我的解释。

© www.soinside.com 2019 - 2024. All rights reserved.