how do I remove rows with duplicated values?

5 vues (au cours des 30 derniers jours)
jesus escareno
jesus escareno le 7 Mar 2017
Commenté : Otto Liljansalo le 14 Mar 2024
let say i have matrix A
A = [1 2 3 4 5;
3 5 7 9 11;
1 1 4 5 7;
3 5 6 6 9;
1 4 10 15 16]
and wanted to remove all rows with values that repeated with each other. Then A will become
A = [1 2 3 4 5;
3 5 7 9 11;
1 4 10 15 16]
Thanks for the help in Advance

Réponse acceptée

the cyclist
the cyclist le 7 Mar 2017
Modifié(e) : the cyclist le 7 Mar 2017
Here is a one-liner:
A(any(diff(sort(A,2),[],2)==0,2),:)=[];
If you are certain that each row is already in numerical order (as in your example), you can skip the sorting step.
The algorithm is the following:
  • Use sort to sort the values in each row
  • Use diff to get the difference between consecutive values in each row
  • Use any to check if any of those differences equal zero (indicating a duplicate values)
  • Use the output of the any command, which is a logical index, to delete the rows that have duplicates
  3 commentaires
Srinivas Kolluru
Srinivas Kolluru le 15 Août 2020
Works perfectly. Thank you
Otto Liljansalo
Otto Liljansalo le 14 Mar 2024
Nice programming there!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Shifting and Sorting Matrices dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by