Matlab: случайное деление порций данных на наборы одинакового размера - PullRequest
1 голос
/ 02 апреля 2011

У меня большой набор данных, который мне нужно случайным образом разделить на 5 наборов почти одинакового размера для перекрестной проверки.Я с радостью использовал _crossvalind_ для разделения на наборы ранее, однако на этот раз мне нужно разделить порции данных на эти группы одновременно.

Скажем, мои данные выглядят так:

data = [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18];

Затем я хочу разделить их случайным образом на 5 групп по 2 куска, например, вот так:

g1 = [3 4], [11 12]  
g2 = [9 10]  
g3 = [1 2], [15 16]  
g4 = [7 8], [17 18]  
g5 = [5 6], [13 14]

Я думаю, что могу сделать это с помощью некоторых циклов for, но я предполагаю, что должно бытьгораздо более рентабельный способ сделать это в Matlab :-)

Есть предложения?

Ответы [ 2 ]

3 голосов
/ 02 апреля 2011

Я интерпретирую ваши потребности в случайном порядке наборов, но в каждом наборе порядок элементов не отличается от родительского набора. Вы можете использовать randperm, чтобы случайным образом упорядочить количество наборов и использовать линейное индексирование для элементов.

dataElements=numel(data);%# get number of elements
totalGroups=5;
groupSize=dataElements/totalGroups;%# I'm assuming here that it's neatly divisible as in your example
randOrder=randperm(totalGroups);%# randomly order of numbers from 1 till totalGroups
g=reshape(data,groupSize,totalGroups)';             %'# SO formatting
g=g(randOrder,:);

Различные строки g дают вам различные группировки.

0 голосов
/ 02 апреля 2011

Вы можете перемешать массив (randperm) и затем разделить его на последовательные равные части.

data = [10 20 30 40 50 60 70 80 90 100 110 120 130 140 150];
permuted = data(randperm(length(data)));
% padding may be required if the length of data is not divisible by the size of chunks
k = 5;
g = reshape(permuted, k, length(data)/k);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...