matlab删除重复行(无序)

时间:2017-02-09 05:14:28

标签: matlab matrix duplicates

例如:

A = [1,3; 3,1; 2,10; 10,2; 3,4; 3,4; 5,8; 9,3; 1,8]

我的目标是

A = [1,3; 2,10; 3,4; 5,8; 9,3; 1,8]

需要删除重复的一个(有序和无序)。

我尝试过唯一,但它不适用于无序行。

1 个答案:

答案 0 :(得分:4)

您可以单独sort行,然后使用unique并查看第二输出,以确定您第一次在矩阵中看到特定事件。您还可以将行视为单个样本,并且还需要稳定唯一结果,以保留您在矩阵A中看到的内容的顺序。排序允许您以无序方式考虑每一行。基本上,第二个输出将用于索引A行,以便您在原始矩阵中提取所需内容,而不是已排序的矩阵。结果是删除重复的行,忽略条目中出现的条目顺序:

[~,id,~] = unique(sort(A, 2), 'rows', 'stable');
out = A(id, :);

使用您提供的输入,我们得到:

>> [~,id,~] = unique(sort(A, 2), 'rows', 'stable');
>> out = A(id, :);

>> out

out =

     1     3
     2    10
     3     4
     5     8
     9     3
     1     8