удалить повторяющиеся элементы matlab

У меня есть две матрицы:

Вход:

A = [1,1;2,4;3,9;4,16;5,25];
B = [3,9;4,16;6,26;7,49;5,25];

Выход:

A = [1,1;2,4;3,9;4,16;5,25];
B = [6,26;7,49];

Я хочу удалить повторяющиеся элементы A из B или наоборот. Ниже приведен мой текущий подход, хотя и правильный, но довольно медленный.

clear all;
clc;

A = [1,1;2,4;3,9;4,16;5,25];
B = [3,9;4,16;6,26;7,49;5,25];

C = B; 
L = 0;
for ii = 1:length(A)
    for jj = 1:length(B)
        if A(ii,1)==B(jj,1) && A(ii,2)==B(jj,2)

            C(jj,1)=0; 
            C(jj,2)=0; 

            L = L+1;
        end       
    end    
end
L
[A B C]


B = zeros(L-1,2);
L = 1;
for ii = 1:length(C)
    if C(ii,1)~=0 && C(ii,2)~=0

        B(L,1) = C(ii,1);
        B(L,2)=  C(ii,2);

        L = L+1;
    end
end
B

Могу ли я сделать это с помощью команды find? или с помощью команды intersect? Спасибо за вашу помощь. Для матрицы с одним столбцом или одной строкой я смог сделать это с помощью команды find или команды intersect.


person roni    schedule 08.07.2013    source источник
comment
Я вижу это. да это именно то, что я хочу.   -  person roni    schedule 08.07.2013


Ответы (3)


>> B(~ismember(B, A, 'rows'), :)

ответ =

 6    26
 7    49
person Kyler Brown    schedule 08.07.2013
comment
Это не сохраняет строки. Вместо этого вы должны использовать B(~ismember(B, A, 'rows'), :). - person Eitan T; 08.07.2013
comment
а, хорошо, спасибо, Эйтан Т. Хотите отредактировать ответ? - person Kyler Brown; 08.07.2013

попробуйте intersect и setdiff для достижения этой цели

person Shai    schedule 08.07.2013

Однако вы сделали это для одного столбца, используя intersect(A,B), вы сможете сделать это для нескольких столбцов, используя intersect(A,B,'rows')

person Dan    schedule 08.07.2013