0

私は2つの行列を持っています:

入力:

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];

AfromBまたはその逆の繰り返し要素を削除したい。以下は私の現在のアプローチですが、正しいですが、かなり遅いです。

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

4

3 に答える 3

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

ans =

 6    26
 7    49
于 2013-07-08T15:11:49.723 に答える
1

この目標を達成しようintersectとするsetdiff

于 2013-07-08T15:08:32.730 に答える