2015-08-10 2 views
0

У меня есть набор данных тренировки 784 * 6000 и вектор метки 1 * 6000. Я хотел перетащить данные, а также метки, я использовал функцию randperm для перестановки меток, и у меня есть перетасованный вектор. как я могу получить индекс старых ярлыков, чтобы я мог также выбрать набор данных. Может кто-нибудь помочь мне
см код игрушечногоЯ перетащил матрицу в matlab, используя randperm, как я могу получить индекс старой матрицы

%toy program 
%label is given for 9 data set 
label =[ 1 1 1 2 2 2 3 3 3]; 
label= label'; 
data = [1 0 0 ; 1 0 0 ; 1 0 0 ;0 1 0; 0 1 0 ; 0 1 0; 0 0 1; 0 0 1; 0 0 1 ]; 

shuffledlabel =label(randperm(size(label,1)),:); 
resizedlabel= shuffledlabel(1:5,:); 

% I want to resize the data also based on the resized labels 
+1

Можете ли вы добавить код, как вы использовали randperm, чтобы перетасовать ваши метки? :) – Ikaros

+0

Добро пожаловать в StackOverflow. Здесь, в SO, мы помогаем друг другу с проблемами, с которыми мы сталкиваемся во время программирования. Поэтому, чтобы получить помощь от сообщества, вы должны быть более конкретным с вашей проблемой. что ты уже испробовал? Пожалуйста, предоставьте часть своего кода, иначе вам будет сложно помочь. – W3hri

+1

, если вы использовали randperm (n, k), чтобы перетасовать свой индексный вектор, и вы хотите, чтобы ваша матрица 784 * 6000 следовала этому индексу, вы должны иметь возможность использовать цикл for и обновлять каждый столбец, установив New (:, t) = Old (:, Ind (t)) – GameOfThrows

ответ

2

Является ли это то, что вы хотите?

ind_shuffle = randperm(size(label,1)); 
shuffledlabel = label(ind_shuffle); 
[~, ind_deshuffle] = sort(ind_shuffle); %// index to recover original order 
deshuffledlabel = shuffledlabel(ind_deshuffle); 
+0

Спасибо! Это то, что я хотел. –

+1

@sollybennet, пожалуйста, не забудьте принять ответ Луиса, так как он решил вашу проблему. Благодаря! –

Смежные вопросы