MATLAB如何随机选择概率较高的较小值?

MATLAB如何随机选择概率较高的较小值?,matlab,random,Matlab,Random,我有一个列向量“距离”,我想从这个向量中随机选择一个值,这样越小的值被选择的概率越高。到目前为止,我使用以下公式,其中“可能的_单元格”是随机选择的值: w=(fliplr(1:numel(distances)))/100 possible_cells=randsample((sort(distances)),1,true,w) 基本上,我翻转距离向量来创建选择概率“w”(如果我正确理解randsample),这样最小的值被选择的概率等于最高的值。为了检查它的效果,我随机抽取了50个值,通过使

我有一个列向量“距离”,我想从这个向量中随机选择一个值,这样越小的值被选择的概率越高。到目前为止,我使用以下公式,其中“可能的_单元格”是随机选择的值:

w=(fliplr(1:numel(distances)))/100
possible_cells=randsample((sort(distances)),1,true,w)
基本上,我翻转距离向量来创建选择概率“w”(如果我正确理解randsample),这样最小的值被选择的概率等于最高的值。为了检查它的效果,我随机抽取了50个值,通过使用直方图,我发现这些值比我预期的要高。有人知道我上面所说的其他方法吗?
0条评论

像这样的怎么样

让我们从长度不大于20的10个样本距离开始,以演示:

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_i=find(rand
这将为我们提供所选距离的索引。这背后的逻辑是,当累积求和与每个距离相关的规范化值(
d_rec_norm
)时,我们创建了宽度与选择每个距离的可能性成比例的“箱子”。剩下的就是选择一个介于0和1之间的随机数(
rand
),看看它落在哪个“箱子”里


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

Hi@Larry522,在我拿到d_I后,我对如何继续以及最后随机数的用途有点困惑。“distanced(d_i)”给我一个与所选索引相对应的值,随机数是如何输入的?变量
d_i
将是所选距离的索引。选择的实际距离为
d(dui)
。一个具体的数字示例可能有助于解释这是如何工作的。。。假设你的距离向量是
d=[5 10]
。然后,
d_rec_norm=[0.6667 0.3333]
,这给了我们选择每个距离的概率
cumsum(d_rec_norm)=[0.6667 1.0000]
,它创建“箱子”。然后,
rand
生成一个介于0和1之间的随机数。随机数介于0和0.6667之间的概率为66%,介于0.6667和1之间的概率为33%。
di
的最后一位代码将找到我们的随机数落在哪个“bin”中。这有用吗?我明白了。在我的特殊情况下,“d_rec_norm”有1000多个非常小的数字(.01、.02等),而“d_rec_norm”是一个零向量。你知道为什么会这样吗?原来“d_rec”的总和是Inf。不知道为什么。