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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MATLAB-如何随机选择具有更高概率的较小值?相关的知识,希望对你有一定的参考价值。

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

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

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

答案

这样的事怎么样?

让我们从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”。

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

以上是关于MATLAB-如何随机选择具有更高概率的较小值?的主要内容,如果未能解决你的问题,请参考以下文章

SQL取两列的较小值或者较大值

自定义排序数组 - 较大值之间的较小值

机器学习 – 练习题

最大公约数和最小公倍数

使用给定概率matlab生成随机数

Leetcode42. 接雨水(dp+双指针)