Sto lavorando con un sistema di recupero di immagini usando l'intersezione dell'istogramma di colore in MATLAB. Questo metodo mi fornisce i seguenti dati: un numero reale che rappresenta la distanza di intersezione dell'istogramma e il nome del file di immagine. Poiché sono tipi di dati diversi, li memorizzo nell'array della struttura con due campi, quindi salvi questa struttura in un file .mat. Ora ho bisogno di ordinare questa struttura secondo la distanza di intersezione dell'istogramma in ordine discendente al fine di recuperare l'immagine con la più alta distanza di intersezione dell'istogramma. Ho provato molti metodi per ordinare questi dati ma senza risultato. Per favore puoi aiutarmi a risolvere questo problema?Come ordinare gli array di strutture in MATLAB?
risposta
Ecco un esempio di come si possa fare ciò, utilizzando la funzione MAX invece di dover ordinare:
%# 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: Se si desidera ottenere i più alti valori N, e non solo la massimo, è possibile utilizzare SORT anziché MAX (as Shaka suggested). Ad esempio (utilizzando la struttura sopra):
>> 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'
È anche possibile ordinare l'intera struttura.
Per costruire al largo di esempio di 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);
Nota: per ordinare il nome del file (o qualsiasi stringa), si farebbe '[~, order] = sort ({s.file});', quindi 'sortedStruct = s (ordine);'. Non è possibile usare "descend" in questo caso, fino a quando non verrà implementato in alcune versioni future di Matlab. –
- 1. Come ordinare un array di strutture
- 2. Gli array dovrebbero essere pensati come strutture orizzontali o verticali
- 3. Rails Kaminari - Come ordinare/impaginare gli array?
- 4. ordinare gli oggetti in Array Data
- 5. Come ordinare una matrice di strutture in ColdFusion
- 6. MATLAB "bug" (o comportamento veramente strano) con le strutture e gli array di celle vuoti
- 7. Distribuire i valori degli array a un singolo campo di un array di strutture (in Matlab)
- 8. Array di stringhe di celle - controllare gli elementi in Matlab
- 9. Come inizializzare una matrice di strutture in MATLAB?
- 10. "Array of array" in MATLAB?
- 11. Il codice più semplice per ordinare gli array in ruby?
- 12. Aggiornamento di un campo in ogni elemento di un array di strutture Matlab
- 13. Array di strutture Python SWIG
- 14. Inizio array di strutture in Go
- 15. Rimozione di elementi da una matrice di strutture in MATLAB
- 16. sorta array in DISC ordinare
- 17. Converti array di strutture in IntPtr
- 18. Come ordinare un array in JavaScript
- 19. Struttura di array e array di strutture - differenza di prestazioni
- 20. Trovare e filtraggio elementi di un array di celle MATLAB
- 21. Indicizzazione di array 2D in MATLAB
- 22. Produzione di array 2D da un array 1D in MATLAB
- 23. Come creare rapidamente gli array in C++
- 24. Come ordinare gli attacchi a strappo?
- 25. Come convertire in modo efficiente gli array di motori Matlab in numpy ndarray?
- 26. Come posso dichiarare gli array in struct?
- 27. Uso di ordinare per ordinare array di array, ascendente e discendente
- 28. Come posso ordinare gli oggetti [Int] in scala?
- 29. Come posso utilizzare gli array MATLAB come chiavi per gli oggetti Java HashMap?
- 30. ordinare un array in base a membri di un altro array in C++
è anche possibile utilizzare ** cat (1, s.value) ** per concatenare i valori – Amro
Grazie mille per la risposta, cercherò usare questa funzione. Per favore posso avere il tuo indirizzo e-mail per inviarti il mio matlab cod grazie –
@zenab: Il mio indirizzo email è sul mio profilo. Sentiti libero di scrivermi se hai qualcosa di cui vuoi discutere direttamente. – gnovice