Возможный дубликат:
Как случайно выбрать k точек из N точек в MATLAB?
Скажем, у меня есть набор данных, который содержит 10 000 строк данных. Каков наилучший способ создания подмножества, включающего 1000 случайно выбранных строк?
Возможный дубликат:
Как случайно выбрать k точек из N точек в MATLAB?
Скажем, у меня есть набор данных, который содержит 10 000 строк данных. Каков наилучший способ создания подмножества, включающего 1000 случайно выбранных строк?
Вы можете использовать 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, :);
Используйте 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
Если у вас есть панель инструментов статистики 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(который я принял как лучший, потому что он не требует какого-либо инструментария).
Примечание. Для получения дополнительной информации о разница между выборкой с заменой по сравнению с выборкой без замените, см. эту страницу.
Не уверен, что вы уже написали какой-либо код. Следующая ссылка mathworks показывает примеры случайной выборки. Взгляните на это для идей.
Также здесь код с randsample из инструментария статистики. Просто логика, и вам, возможно, придется ее соответствующим образом скорректировать.
матрица m из N строк вытащите случайную выборку из n строк из m
Sample = m(randsample(1:N,n),:)
randsample(1:N,n)
Выше получается последовательность из n случайных целых чисел от 1 до N.