I need to choose from the database randomly 20% of the values ​​(lines) in the class "1", transfer them to another matrix, and delete them from the past .. but I can only save and delete one value ... here is the base

M = load('base.txt'); class = 1; set = find(M(:,5)==class); lengClass = length(set); per = round(lengClass*0.2); r = randi([set(1,:), set(lengClass,:)],1,per); for i=1:610 for j=1:per if set(i,:) == r(1:j) Mt(j,:) = M(set(i,:),:); M(set(i,:),:)=[]; end end end 

    1 answer 1

     M = load('base.txt'); % підключення бази Mt = []; % сворення пустої матриція для тестових значень k = 1; % індекс для заповнення тестової матриці columnNumberClass = 5; % номер стовпця, де знаходить значення класу for class=0:1 % цикл для проходження всіх класів selectClass = find(M(:,columnNumberClass)==class); % вибираємо значення стрічок певного класу lengClass = length(selectClass); % кількість стрічок per = round(lengClass*0.2); % підраховуєм скільки значень потрібно для тествої вибріки, в даном випадку 20% r = randi([selectClass(1,:),selectClass(lengClass,:)],1,per); % генеруємо рандомні значення for i=1:lengClass %проходимо матрицю з бази for j=1:per %проходимо рандомні значення if selectClass(i) == r(1) % якщо рандомне значення співпадає з номером рядку то Mt(k,:) = M(selectClass(i),:); % додаємо його то тестової матриці M(selectClass(i,:),:)=[];% видаляємо його з основної матриці k = k +1;% додаємо до індекса для заповнення тестової матриці end end end end