【问题标题】:sampling rows with non-uniform inclusion probabilities in MatlabMatlab中具有非均匀包含概率的采样行
【发布时间】:2014-07-07 17:55:54
【问题描述】:
我有一个包含 n 行的矩阵 M,我有一个包含每行包含概率的 n 维列向量 P M。请注意,每一行的概率可能不同,并且它们不会相加。我想有效地对 M 的行进行采样,方法是将每一行 M_i 以概率 P_i 包含在样本中(独立地)。请注意,我不需要采样矩阵具有特定大小 k,我只需要根据包含概率随机选择每一行。
我已经做了很多搜索,并且知道 randsample 和 datasample,但是这些都不是我想要的。这种采样有内置函数吗?如果不是,那么在 Matlab 中完成此任务的最有效方法是什么?
【问题讨论】:
标签:
matlab
random
sample
random-sample
【解决方案1】:
使用rand 与每个概率进行比较,以生成logical index,该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"