Je travaille avec un système de recherche d'images utilisant l'intersection d'histogrammes couleur dans MATLAB. Cette méthode me donne les données suivantes: un nombre réel qui représente la distance d'intersection de l'histogramme et le nom du fichier image. Comme ce sont des types de données différents, je les stocke dans un tableau de structure avec deux champs, puis j'enregistre cette structure dans un fichier .mat. Maintenant, j'ai besoin de trier cette structure en fonction de la distance d'intersection de l'histogramme dans l'ordre décroissant afin de récupérer l'image avec la plus grande distance d'intersection de l'histogramme. J'ai essayé plusieurs méthodes pour trier ces données mais sans résultat. S'il vous plaît pouvez-vous m'aider à résoudre ce problème?Comment trier les tableaux de structure dans MATLAB?
Répondre
est Voici un exemple de la façon dont vous pouvez faire cela, en utilisant la fonction MAX au lieu d'avoir à trier:
%# First, create a sample structure array:
s = struct('value',{1 7 4},'file',{'img1.jpg' 'img2.jpg' 'img3.jpg'});
%# Next concatenate the "value" fields and find the index of the maximum value:
[maxValue,index] = max([s.value]);
%# Finally, get the file corresponding to the maximum value:
maxFile = s(index).file;
EDIT: Si vous souhaitez obtenir les N valeurs les plus élevées, et pas seulement maximum, vous pouvez utiliser SORT au lieu de MAX (as Shaka suggested). Par exemple (en utilisant la structure ci-dessus):
>> N = 2; %# Get two highest values
>> [values,index] = sort([s.value],'descend'); %# Sort all values, largest first
>> topNFiles = {s(index(1:N)).file} %# Get N files with the largest values
topNFiles =
'img2.jpg' 'img3.jpg'
Il est également possible de trier la structure entière.
Pour construire au large de l'exemple de gnovice ...
% Create a structure array
s = struct('value',{1 7 4},'file',{'img1.jpg' 'img2.jpg' 'img3.jpg'});
% Sort the structure according to values in descending order
% We are only interested in the second output from the sort command
[blah, order] = sort([s(:).value],'descend');
% Save the sorted output
sortedStruct = s(order);
Note: pour trier par le nom de fichier (ou toute autre chaîne), vous devez faire '[~, order] = sort ({s.file});', puis 'sortedStruct = s (order);'. Dans ce cas, vous ne pouvez pas utiliser "descending", jusqu'à ce que cela soit implémenté dans une future version de Matlab. –
- 1. Comment ... Trier 4 x tableaux 1D?
- 2. Comment faire pour trier les tableaux par produit [compteur] .getProductTitle()?
- 3. Comment faire un tri imbriqué dans MATLAB?
- 4. Comment puis-je compter le nombre de propriétés dans une structure dans MATLAB?
- 5. Ruby: Comment faire la structure d'impression IRB pour les tableaux et les hachages
- 6. Comment trier les données hiérarchiques dans WPF?
- 7. Aidez à fusionner 2 tableaux et à trier par clé
- 8. Comment lire les champs de texte dans MATLAB et créer une seule matrice
- 9. Créer un tableau de tous les éléments dans les sous-tableaux d'un tableau de tableaux?
- 10. Trier une structure par le prénom puis le prénom
- 11. Comment utiliser les classes Java définies par l'utilisateur dans Matlab?
- 12. Déclencheurs DAQ dans Matlab
- 13. Comment trier les enregistrements par page
- 14. Comment trier les données en valeurs alphanumériques
- 15. Comment émuler le comportement 'include' dans MATLAB?
- 16. Comment obtenir les résultats de Matlab en Java?
- 17. Binning dans matlab
- 18. Comment annoter des graphiques dans MATLAB?
- 19. ANSI C: Affectation de tableaux et de pointeurs aux tableaux
- 20. Comment faire fonctionner MATLAB xUnit sur MATLAB R2008b (7.7)?
- 21. Comment utiliser CodeVariableDeclaraionStament pour déclarer les tableaux
- 22. Comment trier les produits JSON avec PHP
- 23. Retirer dupes/trier à partir d'un tableau de tableaux associatifs en PHP
- 24. Lecture dans les tableaux en C++
- 25. plusieurs occurrences dans les tableaux imbriqués
- 26. Trier les numéros avec easy68k
- 27. Renommer des fichiers dans MATLAB
- 28. tableau JavaScript avec un mélange de littéraux et les tableaux
- 29. mysql structure pour les commentaires et les réponses de commentaires
- 30. AccessViolationException lors de la sérialisation d'une structure de tableaux de structures?
vous pouvez également utiliser ** chat (1, s.value) ** pour concaténer les valeurs – Amro
Merci beaucoup pour la réponse, je vais essayer pour utiliser cette fonction. S'il vous plaît, puis-je obtenir votre adresse e-mail afin de vous envoyer mon matlab mor merci –
@zenab: Mon adresse e-mail est sur mon profil. Ne hésitez pas à me laisser tomber une ligne si vous avez quelque chose que vous voulez discuter directement. – gnovice