24

可能重复:
如何从 MATLAB 中的 N 个点中随机选择 k 个点?

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

4

4 回答 4

34

您可以使用 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, :); 
于 2012-11-28T11:17:43.927 回答
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
于 2012-11-28T11:21:21.160 回答
3

如果你有统计工具箱 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 的答案相同(我认为这是最好的,因为它不需要任何工具箱)。

注意:有关带替换采样与不带替换采样之间差异的更多信息,请参阅此页面

于 2012-11-28T11:21:10.663 回答
1

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

这里还有一个来自统计工具箱的带有 randsample 的代码。只是一个逻辑,您可能必须相应地调整它。

N 行的矩阵 m 从 m 中抽取 n 行的随机样本

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

randsample(1:N,n)

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

于 2012-11-28T11:28:17.060 回答