我想从大量的N个样本中创建n个样本的一个子集,我通常在Matlab中使用randperm函数,并取前n个索引。但是,由于数据可能非常大,randperm会给我提供的内存不足的错误消息。在Matlab中随机选择大量样本的子集
我想提出一些建议,如何在Matlab中不使用randperm函数的情况下从大量数据集中选择一个小子集。
谢谢。
我想从大量的N个样本中创建n个样本的一个子集,我通常在Matlab中使用randperm函数,并取前n个索引。但是,由于数据可能非常大,randperm会给我提供的内存不足的错误消息。在Matlab中随机选择大量样本的子集
我想提出一些建议,如何在Matlab中不使用randperm函数的情况下从大量数据集中选择一个小子集。
谢谢。
如果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
双重检查无害,谢谢 – zhidayat 2014-11-03 06:13:25
您可以尝试使用单()减半命令datasize:
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));
你试过'randsample'吗? – Shai 2014-11-02 09:48:47
我以前不知道,但它不起作用 – zhidayat 2014-11-03 05:58:49