在MATLAB中以一对一的方式匹配2组列

时间:2013-11-12 21:06:14

标签: matlab matrix matching one-to-one

我在MATLAB中有两组需要匹配的列。如果映射不必是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  ] ; 

我需要在Mat2中删除Mat1中那些基于1,2,3,4列的 找到 的行。结果:

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

但是,您的示例结果让我感到困惑。结果的第二行和第三行出现在mat2中(忽略最后一列),因此应删除它们,对吗?