Estoy trabajando con un sistema de recuperación de imágenes usando la intersección del histograma de color en MATLAB. Este método me proporciona los siguientes datos: un número real que representa la distancia de intersección del histograma y el nombre del archivo de imagen. Debido a que son tipos de datos diferentes, los almaceno en una matriz de estructura con dos campos, y luego guardo esta estructura en un archivo .mat. Ahora necesito ordenar esta estructura de acuerdo con la distancia de intersección del histograma en orden descendente para recuperar la imagen con la distancia de intersección del histograma más alta. He intentado muchos métodos para ordenar estos datos pero sin resultado. ¿Puedes ayudarme a resolver este problema?¿Cómo ordenar matrices de estructuras en MATLAB?
Respuesta
Aquí hay un ejemplo de cómo se puede hacer esto, utilizando la función MAX en lugar de tener que ordenar:
%# 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 desea obtener los valores más altos de N, y no sólo el máximo, puede usar SORT en lugar de MAX (as Shaka suggested). Por ejemplo (usando la estructura anterior):
>> 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'
También es posible ordenar toda la estructura.
Para construir fuera del ejemplo 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);
Nota: para ordenar por el nombre de archivo (o cualquier cadena), harías '[~, orden] = sort ({s.file});', luego 'sortedStruct = s (orden);'. No puede usar ''descender'' en ese caso, hasta que esto se implemente en alguna versión futura de Matlab. –
- 1. estructuras Almacenamiento de MATLAB en objetos Java
- 2. ordenar columnas en Matlab
- 3. 'Matriz de matrices' en matlab?
- 4. estructuras anidadas/matrices de inicialización
- 5. matrices dentro de estructuras en C
- 6. Cómo ordenar matrices múltiples en PHP
- 7. Comparando dos matrices en Matlab
- 8. PHP ordenar matrices multidimensionales
- 9. Cómo ordenar una matriz de estructuras en C#?
- 10. Cómo ordenar una matriz de estructuras en ColdFusion
- 11. MATLAB "error" (o comportamiento realmente extraño) con estructuras y matrices de celdas vacías
- 12. Matlab - ordenar por valor absoluto
- 13. Rails Kaminari - ¿Cómo ordenar/paginar matrices?
- 14. ¿Cómo puedo "ordenar zip" matrices numpy paralelas?
- 15. matlab - cómo combinar/entrelazar 2 matrices?
- 16. ¿Cómo ordenar una serie de estructuras de C++ a C#?
- 17. ¿Cómo elimino la intersección de los conjuntos A y B de A sin ordenar MATLAB?
- 18. Ordenar matrices PHP basadas en valores duplicados
- 19. ¿Cómo puedo acceder a matrices de células anidadas en MATLAB?
- 20. Python ordenar matrices paralelas en su lugar?
- 21. Funciones incorporadas para ordenar matrices en C
- 22. correlación en Matlab entre dos matrices
- 23. matrices asociativas rápido o mapas en Matlab
- 24. Ordenar dos matrices de la misma manera
- 25. vectorización de indexación multi-nivel de estructuras en MATLAB
- 26. Octave/MATLAB: ¿Cómo comparar las estructuras para la igualdad?
- 27. Malloc de matrices y estructuras dentro de una estructura
- 28. clase Java comparador para ordenar matrices
- 29. Ordenar una matriz de matrices de diferentes índices en C
- 30. Matlab: ¿cómo convertir la matriz de estructuras en matriz de estructuras con el operador de dos puntos?
también se puede utilizar ** cat (1, s.value) ** para concatenar los valores – Amro
muchas gracias por la respuesta, voy a tratar para usar esta función Por favor, puedo obtener su dirección de correo electrónico para enviarle mi bacalao matlab gracias –
@zenab: Mi dirección de correo electrónico está en mi perfil. Siéntete libre de escribirme una línea si tienes algo que quieras discutir directamente. – gnovice