如何从Matlab中的数据集中选择随机样本

时间:2012-11-28 11:12:18

标签: matlab octave random-sample

  

可能重复:
  How do I randomly select k points from N points in MATLAB?

假设我有一个包含10,000行数据的数据集。创建包含1,000个随机选择行的子集的最佳方法是什么?

4 个答案:

答案 0 :(得分:33)

您可以使用randperm执行此任务:

无需更换的抽样:

nRows = 10000; % number of rows
nSample = 1000; % number of samples

rndIDX = randperm(nRows); 

newSample = data(rndIDX(1:nSample), :); 

替换取样:

nRows = 10000; % number of rows
nSample = 1000; % number of samples

rndIDX = randi(nRows, nSample, 1); 

newSample = data(rndIDX, :); 

答案 1 :(得分:6)

randperm与行数结合使用。如果x是您的矩阵:

nrows = size(x,1);
nrand = 1000; % Choose 1000 rows
assert(nrand<=nrows, 'You cannot choose more rows than exist in the matrix');
rand_rows = randperm(nrows, nrand);
xx = x(rand_rows,:);  % Select the random rows from x

答案 2 :(得分:4)

如果您拥有统计工具箱R2012 +,则可以使用datasample

subset = datasample(data,1000)

subset将是随机选择的数据子集,包含1000个样本。

要进行无需替换的样本,请使用:

subset = datasample(data,1000,'Replace',false)

如果您使用的是旧版本的工具箱,则可以使用randsample

rndIdx = randsample(size(data,1),1000,true); % with replacement
subset = samples(rndIdx(1:1000), :);

rndIdx = randsample(size(data,1),1000,false); % without replacement
subset = samples(rndIdx(1:1000), :);

但是使用randsample与H.Muster的答案大致相同(我认为它是最好的,因为它不需要任何工具箱)。

注意:有关的更多信息     采样替换与采样之间的差异     替换,请参阅this page

答案 3 :(得分:1)

目前还不确定您是否编写了任何代码。以下mathworks链接显示了随机抽样的示例。看看它的想法。

此处还有一个代码,其中包含统计工具箱中的randsample。只是一个逻辑,你可能需要相应地调整它。

N行的矩阵m 从m

中抽取n行的随机样本

Sample = m(randsample(1:N,n),:)

randsample(1:N,n)

上面的结果是从1到N的n个随机整数序列。