在Matlab中随机选择大量样本的子集

时间:2014-11-02 09:38:50

标签: matlab

我想从大量N个样本中创建n个样本的子集,n <&lt;&lt; N.我通常在Matlab中使用randperm函数并获取前n个索引。但是,由于数据可能非常大,randperm会给出错误消息,说明内存不足。

我想提出建议,如何在Matlab中不使用randperm函数从大量数据集中选择一个小子集。

谢谢。

3 个答案:

答案 0 :(得分:0)

您可以尝试使用single()将数据大小减半:

http://www.mathworks.de/help/matlab/ref/single.html

答案 1 :(得分:0)

randi给出均匀分布的数字,

Ind = randi(N,[n 1]);
Observation = data(Ind); 

您也可以使用datasample

Observation = datasample(data,n,'Replace',false));

正如@Shai所提到的,另一种选择是randsample

Observation = data(randsample(N,n));

答案 2 :(得分:0)

如果n远小于N,则rejection method效率很高:使用randi生成可能重复的样本,检查是否有重复(不是非常可能),如果有的话重复:

N = 10000;
n = 100;
repeat = true;
while repeat
    sample = randi(N,1,n);
    repeat = any(sum(bsxfun(@eq, sample, sample.'))>1);
end
相关问题