我想从大量N个样本中创建n个样本的子集,n <&lt;&lt; N.我通常在Matlab中使用randperm函数并获取前n个索引。但是,由于数据可能非常大,randperm会给出错误消息,说明内存不足。
我想提出建议,如何在Matlab中不使用randperm函数从大量数据集中选择一个小子集。
谢谢。
答案 0 :(得分:0)
您可以尝试使用single()将数据大小减半:
答案 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