Сначала сортируйте по столбцам.Это означает, что каждая строка сначала будет иметь самое низкое значение, и вы сравниваете строки независимо от исходного порядка.
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]
появляется в последней3 строки arr
(в некотором порядке).
Существует множество форматов, в которых вы можете захотеть получить результат. Если вам нужно больше, чем просто массивы выше, вы можете рассмотреть массивы ячеек.Простой цикл был бы ясным способом создать это:
c = cell(size(uRows,1), 2);
for ii = 1:size(uRows,1)
c{ii,1} = uRows(ii,:); % This row
c{ii,2} = find( iRows == ii ); % Indices of this row value within 'arr'
end