2017-05-26 1 views
0

J'ai une matrice, un petit échantillon des données:Trouvez valeur la plus basse dans la colonne pour 2 valeurs uniques dans d'autres colonnes Matlab

A= 

1 3 658 

2 3 475 

5 3 769 

1 3 856 

6 7 1579 

2 3 678 

5 3 118 

6 7 617 

Alors maintenant, je veux trouver pour chaque combinaison unique de la colonne A et B la valeur la plus faible dans la colonne C, de préférence dans une nouvelle matrice.

Ainsi, la sortie sera:

B= 

1 3 658 

2 3 475 

5 3 118 

6 7 617 

Pourriez-vous me diriger dans la direction de la meilleure façon de le faire? Merci à l'avance

Répondre

3

Une combinaison de sortrows et unique avec l'option rows devrait vous donner le résultat souhaité.

A = sortrows(A); % After the sort unique combinations will be adjacent and with increasing values in 3rd column 
[~,ia] = unique(A(:,1:2),'rows'); % Find index of all the unique comb in col 1 & 2, unique only returns the first index 
B = A(ia,:); 
+0

fonctionne très bien, merci! – Rogier

1

Si les valeurs des deux premières colonnes sont des nombres entiers positifs et les valeurs du troisième sont non nuls, vous pouvez aussi le faire comme suit:

[ii, jj, vv] = find(accumarray(A(:,[1 2]), A(:,3), [], @min, 0, true)); 
B = [ii jj vv];