我在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
答案 0 :(得分:1)
根据您的描述,我认为您想要的是:
mat1(~ismember(mat1(:,1:size(mat2,2)),mat2,'rows'),:)
但是,您的示例结果让我感到困惑。结果的第二行和第三行出现在mat2
中(忽略最后一列),因此应删除它们,对吗?