在MATLAB中找到成对比较的重复项

时间:2018-05-21 13:59:58

标签: matlab loops dataframe duplicates

我有一个非常大的数据集,如下所示:

x1 x2
2  5
4  10
5  2
....

我想找到具有相同值(重复)的所有行,但是,无论顺序如何。在上面的例子中,我想找到第1行和第3行,因为它们都有值2和5.

由于我有大约14000个比较,如何使用MATLAB以有效的方式完成此操作?

1 个答案:

答案 0 :(得分:3)

首先,按列排序。这意味着每一行都将具有最低的值,并且无论原始顺序如何,您都在比较行。

arr = [2 5; 4 10; 5 2; 6 7; 6 7; 6 7];
arrSorted = sort( arr, 2 );

然后使用unique获取所有唯一的行及其相应的索引。

[uRows, ~, iRows] = unique( arrSorted, 'rows' );

输出:

>> uRows = [2  5 
            4 10
            6  7]
>> iRows = [1
            2
            1
            3 
            3
            3]

数组iRowsuRows中每行arr内的索引,因此例如第3行[6 7]出现在{{1}的最后3行中(按某种顺序)。

您可能需要多种格式的结果。如果您需要的不仅仅是上面的数组,您可能会考虑单元格数组。一个简单的循环将是一个明确的方法来创建它:

arr