从符合特定条件MATLAB的数组中删除行

时间:2016-06-01 17:41:24

标签: arrays matlab

我有一个包含多行和两列的数组,其中整数作为元素。我想删除包含两个列中不存在的元素的行。 例如,我有一个矩阵A,如下所示

   1   2
   1   6
   7   1
   4   7
   6   4
   9   1
   6   2

查看除2&之外的所有元素两列均存在图9。所以我想删除第1行,第6行和第7行,它们给出了输出

1   6
7   1
4   7
6   4

我能想到的是形成一个列表,其中包含两个行中都不存在的元素,并且对于列表中的每个元素,查找包含此数字的数组“A”中的行,并从数组中删除行使每一行删除= []。

我必须在具有数百万行的数组上执行此操作,并且上述过程花费了大量时间。请帮助提供一种更有效的方法。

干杯。

1 个答案:

答案 0 :(得分:1)

您可以使用ismember来确定每列的成员是否在另一列中(或不在列中)。

% Find the elements in column 2 that are present in column 1 AND
% elements in column 1 that are present in column 2.

toKeep = ismember(A(:,2), A(:,1)) & ismember(A(:,1), A(:,2));
B = A(tokeep,:);

%   1     6
%   7     1
%   4     7
%   6     4