在多个数组中查找重复行并删除

4
我可以帮助您翻译以下内容,这是关于编程的:

我在删除两个数组中都存在的行时遇到了问题。

我有两个数组:

array1 = 1 2
         3 4
         5 6
         7 8
         9 10

array2 = 1 5
         7 8
         3 2

如果该行同时出现在两个数组中,我想将其从array1中删除(例如[7,8])。我尝试了下面这行代码:
array1( find(array1(:,1) == array2(:,1)) ,:) = [];

但是我收到了以下错误信息:

使用 == 时出错,矩阵的维度必须一致。

正确的做法是什么?

2个回答

5

例如,如果您的数组为ab,可以使用ismember函数:

a(ismember(a,b,'rows'),:)=[];

应该能胜任。


不知道ismember函数的 'rows' 参数。非常简洁。 - Floris
谢谢,这正是我需要的。我之前设置了一个循环,但它很混乱。 - FireSky

1

setdiff更为直接,如果需要保留原始数组,则可以使用它:

setdiff(array1,array2,'rows','stable')

仅供参考,您也可以使用interect

[~,ia] = intersect(array1,array2,'rows');
array1(ia,:) = [];

然而,我会使用 setdiff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接