首页 > 解决方案 > 从矩阵中删除不匹配的元素

问题描述

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

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

标签: matrixoctaverows

解决方案


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

推荐阅读