我有一个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
答案 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
}