从矩阵中删除不匹配的元素

时间:2018-10-18 12:03:30

标签: matrix octave rows

我正在尝试比较两个矩阵AB。如果A的前两列中的元素与B中的元素匹配,我想从A中删除所有不匹配的行。 B中的第三列不应纳入比较。

A = [1 2 3      B = [1 2 8
     3 4 5           3 4 5]
     6 7 8]

所需结果:

A = [1 2 3
     3 4 5]

到目前为止,我只找到了删除重复条目的方法,这与我想要的完全相反。我该怎么办?

2 个答案:

答案 0 :(得分:2)

您可以有效地使用ismember来完成此任务:

% Input matrices
A = [1 2 3; 3 4 5; 7 8 9];
B = [1 2 8; 3 4 5];

A1 = A(:,1:2);                   % Extract first two columns for both matrices
B1 = B(:,1:2);
[~,ii] = ismember(A1,B1,'rows'); % Returns which rows in A1 are also in B1
ii = ii(ii>0);                   % Where ii is zero, it's a non-matching row
A(ii,:)                          % Index to keep only matching rows

所有这些都可以更紧凑地编写,但我想先展示一下逐步过程:

[~,ii] = ismember(A(:,1:2),B(:,1:2),'rows');
A(ii(ii>0),:)

答案 1 :(得分:0)

A = [1 2 3;3 4 5;7 8 9];
B = [1 2 8; 3 4 5];
tmp = min([size(A,1) size(B,1)]); % get size to loop over
k = false(tmp,1); % storage counter
for ii = 1:tmp 
    if all(A(ii,1:2)==B(ii,1:2)) % if the first two columns match
        k(ii)=true; % store
    end
end

C = A(k,:) % extract requested rows