我有一个包含多行和两列的数组,其中整数作为元素。我想删除包含两个列中不存在的元素的行。 例如,我有一个矩阵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”中的行,并从数组中删除行使每一行删除= []。
我必须在具有数百万行的数组上执行此操作,并且上述过程花费了大量时间。请帮助提供一种更有效的方法。
干杯。
答案 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