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

remove non matching elements from matrix

我正在尝试比较两个矩阵 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]

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

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

您可以有效地使用 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),:)