在Matlab中对具有非均匀包含概率的行进行采样

时间:2014-07-07 17:55:54

标签: matlab random sample random-sample

我有一个带 n 行的矩阵 M ,我有一个n维列向量 P ,其中包含每行的包含概率of M 。请注意,每行的概率可能不同,并且它们不会添加到一行。我想通过在样本中(独立地)以概率 P_i 包含每行 M_i 来有效地对 M 行进行采样。注意,我不需要采样矩阵具有特定大小k,我只需要根据其包含概率随机选择每一行。

我做了很多搜索,我知道 randsample datasample ,但这些都不是我想要的。这种采样是否有内置功能?如果没有,那么在Matlab中实现这一目标的最有效方法是什么?

1 个答案:

答案 0 :(得分:0)

使用rand与每个概率进行比较,生成一个logical index,告知我选择了哪些M行。

基本思想是rand在区间(0,1)中生成具有均匀分布的随机数,因此一个这样的数字小于给定 x 的概率( x 介于0和1之间)正是 x

probs = [.6; .3; .2; .4]; %// contains n probabilities (where n is size(M,1))
ind = rand(size(probs))<probs; %// "0"/"1" logical index
result = M(ind,:) %// pick only rows with a "1"