Как определить, имеет ли прямоугольная матрица дубликаты строк в MATLAB?
У меня есть прямоугольная матрица n-by-m (n!= m). Какой лучший способ узнать, есть ли в MATLAB дубликаты строк? Какой лучший способ найти индексы дубликатов?
Ответы
Ответ 1
Используйте unique(), чтобы найти различные значения строк. Если у вас меньше строк, есть дубликаты. Он также даст вам индексы одного местоположения каждого из отдельных значений. Все остальные индексы строк являются вашими дубликатами.
x = [
1 1
2 2
3 3
4 4
2 2
3 3
3 3
];
[u,I,J] = unique(x, 'rows', 'first')
hasDuplicates = size(u,1) < size(x,1)
ixDupRows = setdiff(1:size(x,1), I)
dupRowValues = x(ixDupRows,:)
Ответ 2
Вы можете использовать функции UNIQUE и SETDIFF, чтобы выполнить это:
>> mat = [1 2 3; 4 5 6; 7 8 9; 7 8 9; 1 2 3]; %# Sample matrix
>> [newmat,index] = unique(mat,'rows','first'); %# Finds indices of unique rows
>> repeatedIndex = setdiff(1:size(mat,1),index) %# Finds indices of repeats
repeatedIndex =
4 5
Ответ 3
Запустите строки матрицы и для каждой пары проверьте, если
row1 == row2
Ответ 4
Скажите, что ваша матрица: M:
[S,idx1] = sortrows(M);
idx2 = find(all(diff(S,1) == 0,2));
out = unique(idx1([idx2;idx2+1]));
out будет содержать повторяющиеся индексы строк, если они есть.