Matlab:删除重叠行

时间:2012-08-16 22:20:21

标签: matlab matrix overlap

我需要从一列中删除两个基质的重叠行。

例如:

Matrix 1:

1, 5;
2, 23;
3, 51;
4, 21;
5, 661;

Matrix 2:

4, 11;
5, 601;
6, 341;
7, 5;
etc.

会导致:

结果矩阵:

1, 5;
2, 23;
3, 51;
4, 11;
5, 601;
6, 341;
7, 5;

谢谢! 基督教

2 个答案:

答案 0 :(得分:3)

替代方法,始终保持所选列中的最后一次出现:

x = [x1;x2];
columnIndex = 1; % column 1 
[~, i] = unique(x(:, columnIndex), 'last');
xMerge = x(i, :);

适用于多个矩阵和不同的列以进行索引。

答案 1 :(得分:2)

您可以将union与其他索引输出结合使用。

x1 = [ ...
    1, 5; ...
    2, 23;...
    3, 51;...
    4, 21;...
    5, 661];

x2 = [ ...
    4, 11;...
    5, 601;...
    6, 341;...
    7, 5];

[~, ixs1, ixs2] = union(x1(:,1), x2(:,1));


xMerge = [...
    x1(ixs1,:); ...
    x2(ixs2,:)];

这导致:

>> xMerge 
xMerge =
     1     5
     2    23
     3    51
     4    11
     5   601
     6   341
     7     5