2016-11-02 2 views
0

У меня есть матрицаMatlab удаления строки на основе значения случайного

A = [1 2;2 2;3 3;4 3;5 3;6 3;7 2;8 3;9 2;10 2;11 3;12 3;13 2;14 2;15 3] 

мне нужно случайным образом удалить 10 строки из A.
Я использую этот код:

for i = 1:10 
    x = randi([2 3],1); 
    A(any(A==x,2),:)=[]; 
end 

так A остальные только пять строк. спасибо так много ..

ответ

2

Если вы хотите, чтобы случайно удалить 10 строк из 15, вы baiscally должны randsample строк для удаления:

num_to_remove = 10; 
idx = randsameple(size(A,1), num_to_remove); 
A(idx,:) = []; % remove the sampled rows 

Вам нужно только, чтобы убедиться size(A,1) >= num_to_remove.


PS,
Лучше не использовать ias a variable name in Matlab.

+1

Спасибо @Shai – 8727

+1

Я думаю, что 'randsample' может быть немного переборщиком здесь. 'randsample' - это набор инструментов статистики и машинного обучения и имеет несколько вариантов, которые здесь не используются. Вызов ['randperm'] (https://www.mathworks.com/help/matlab/ref/randperm.html) выполнит то же самое и будет поставляться с ванильным MATLAB. – craigim

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