我有一个列向量“距离”,我想从这个向量中随机选择一个值,使得较小的值具有较高的被选择概率。到目前为止,我使用以下内容,其中“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”。
我是这里的新海报,所以如果不清楚我可以告诉我,我可以尝试改进我的解释。