2014-01-28 2 views
1

У меня есть матрица 65536x8 со всеми возможными комбинациями значений - 45 90 135 180 (в 8 столбцах).удаление строк из матрицы на основе конкретных условий

Мне нужно удалить все строки, которые не содержат всех четырех значений (каждая строка не может пропустить ни одно из этих значений).

Это то, что я пытался (не работает):

>> orient(orient(numel(orient(:,1))) == 45 && 90 && 135 && 180,:) 

ans = 

    Empty matrix: 0-by-8 

Есть ли какой-то эффективный способ сделать это в MATLAB?

ответ

1

Это должно дать вам представление о том, как идти об этом:

A = [1 1 1 
    1 1 2 
    1 1 3 
    1 2 1 
    1 2 2 
    1 2 3 
    1 3 1 
    1 3 2 
    1 3 3 
    2 1 1 
    2 1 2 
    2 1 3]; 


A(any((A == 1)') & any((A == 2)') & any((A == 3)'),:) 

ans = 

    1 2 3 
    1 3 2 
    2 1 3 

Или обобщенно с помощью цикла (только 4 числа, это должно быть довольно быстро):

rows = true(size(A,1),1);    %// Initialization 
U = unique(A);       %// List of numbers 
for n = 1:size(U,1) 
    rows = rows & any((A == U(n))')'; 
end 
A(rows,:) 
Смежные вопросы