删除matlab中元素相同的矩阵中的行

时间:2015-07-02 20:50:39

标签: arrays matlab matrix

例如,给出一个2列矩阵。输入是:

[ 1,2;
  3,4;
  5,5]

预期输出为:

[1,2;
 3,4;]

有谁知道如何做到这一点?非常感谢您的时间和关注。

2 个答案:

答案 0 :(得分:2)

您可以使用逻辑索引:

A = [1 2;3 4;5 5];
match = A(:,1) == A(:,2); // 1 where row has the same elements in both columns
A(match,:) = []; // make the match columns empty

对于另一个案例,您需要使其更通用,但对于两列和您的示例,这将起作用。

答案 1 :(得分:2)

您的问题表明您的矩阵可能有任意数量的列。在这种情况下,如果行( a 任意两个元素相等,或者( b 全部,则可能需要删除一行元素相等。

一种可能的方法是:

  1. 沿每行申请sort;
  2. 使用diff计算连续元素之间的差异;
  3. 生成logical index all至( a )保留所有此类差异均为非零的行,或使用any生成( > b )保留任何此类差异不为零的行:
  4. 所以:

    X = [1 2 3;
         3 4 3;
         5 5 5];
    Y = X(all(diff(sort(X,2),[],2),2),:);
    Z = X(any(diff(sort(X,2),[],2),2),:);
    

    给出

    Y =
         1     2     3
    Z =
         1     2     3
         3     4     3