在MATLAB中一起删除矩阵和单元格的重复行

时间:2015-11-07 15:30:09

标签: matlab duplicates unique

我有一个30000行的矩阵A和一个行号相同的单元格B.我想删除重复的行。如果它只是一个矩阵A,我可以使用该函数唯一。但对于A(矩阵)和B(Cell),我该如何进行?非常感谢!

A和B的例子如下所示。第4行和第5行是重复的(对于A和B都是如此),而第5行和第6行不应该是重复的。

A

1   2   3   4   
11  12  13  14
21  22  23  24
31  32  33  34
31  32  33  34
31  32  33  34
41  42  43  44

a
b
c
d
d
e
f

1 个答案:

答案 0 :(得分:3)

您可以使用unique的第二个返回值执行此操作:

[C,ia,ic] = unique(A,'rows',setOrder)

ia为您提供了A个唯一行的索引。如果您在矩阵A上执行此操作,则会得到:

>> [~,iA,~] = unique(A,'rows','first')
iA =

   1
   2
   3
   4
   7

(我使用了选项'first',因为我似乎更自然地返回第4行而不是第5行。如果您愿意,可以使用默认的'last',只要您这样做相一致。)

由于B是一个单元格数组,因此您不需要'rows'选项:

>> [~,iB,~] = unique(B,'first')
iB =

   1
   2
   3
   4
   6
   7

这告诉我们,尽管矩阵A告诉我们,第4行在第6行是唯一的。如果我们采用这两者的集合,我们得到:

>> uAB = union(iA,iB)
uAB =

   1
   2
   3
   4
   6
   7

现在你应该拥有所有唯一行的索引:

>> A(uAB,:)
ans =

    1    2    3    4
   11   12   13   14
   21   22   23   24
   31   32   33   34
   31   32   33   34
   41   42   43   44

>> B(uAB)
ans =
{
  [1,1] = a
  [2,1] = b
  [3,1] = c
  [4,1] = d
  [5,1] = e
  [6,1] = f
}