0

我在 MATLAB 中有 2 组需要匹配的列。如果映射不是必须的,有很多方法可以做到这一点one-to-one。我下面的示例将说明我正在尝试做的事情

mat1 = [ 100  734567 500 734567 23
         1011 734568 200 734568 11
         1011 734568 200 734568 23
         1011 734568 200 734568 23
         1011 734568 200 734568 34
         1111 734569 300 734569 34 ] ; % ignore last column

mat2 = [ 1011 734568 200  734568
         1011 734568 200  734568
         1011 734568 100  734568
         1111 734569 300  734569  ] ; 

我需要根据第 1、2、3、4 列从 Mat1 中删除在 Mat2 中找到的那些行。结果:

mat1 = [ 100  734567 500 734567 23
         1011 734568 200 734568 23
         1011 734568 200 734568 34 ] ;

一个可能的解决方案是包含 row_ids 1,2,3.. 用于如下所示的唯一行,但我无法实现相同的。谢谢你的帮助!实际数据集很大,因此首选矢量化解决方案!

mat2 = [ 1011 734568 200  734568 1 
         1011 734568 200  734568 2
         1011 734568 100  734568 1
         1111 734569 300  734569 1
4

1 回答 1

1

根据您的描述,我认为您想要的是:

mat1(~ismember(mat1(:,1:size(mat2,2)),mat2,'rows'),:)

但是,您的示例结果使我感到困惑。结果的第二行和第三行存在mat2(忽略最后一列),所以它们应该被删除,对吧?

于 2013-11-12T21:45:20.433 回答