2014-11-02 94 views
1

我想从大量的N个样本中创建n个样本的一个子集,我通常在Matlab中使用randperm函数,并取前n个索引。但是,由于数据可能非常大,randperm会给我提供的内存不足的错误消息。在Matlab中随机选择大量样本的子集

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

谢谢。

+1

你试过'randsample'吗? – Shai 2014-11-02 09:48:47

+0

我以前不知道,但它不起作用 – zhidayat 2014-11-03 05:58:49

回答

0

如果nN小得多,一个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 
+0

双重检查无害,谢谢 – zhidayat 2014-11-03 06:13:25

0

randi给出均匀分布的数字,

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

你也使用datasample

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

As @Shai提及d,另一种选择是randsample

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