可能重复:
How do I randomly select k points from N points in MATLAB?
假设我有一个包含10,000行数据的数据集。创建包含1,000个随机选择行的子集的最佳方法是什么?
答案 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个随机整数序列。