我有一个非常大的数据集,如下所示:
x1 x2
2 5
4 10
5 2
....
我想找到具有相同值(重复)的所有行,但是,无论顺序如何。在上面的例子中,我想找到第1行和第3行,因为它们都有值2和5.
由于我有大约14000个比较,如何使用MATLAB以有效的方式完成此操作?
答案 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]
数组iRows
是uRows
中每行arr
内的索引,因此例如第3行[6 7]
出现在{{1}的最后3行中(按某种顺序)。
您可能需要多种格式的结果。如果您需要的不仅仅是上面的数组,您可能会考虑单元格数组。一个简单的循环将是一个明确的方法来创建它:
arr