How to sort structure arrays in MATLAB?

后端 未结 2 1796
北恋
北恋 2021-02-14 07:55

I\'m working with an image retrieval system using color histogram intersection in MATLAB. This method gives me the following data: a real number which represents the histogram i

相关标签:
2条回答
  • 2021-02-14 08:37

    Here's one example of how you could do this, using the function MAX instead of having to sort:

    %# 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 : If you would like to get the N highest values, and not just the maximum, you can use SORT instead of MAX (as Shaka suggested). For example (using the above structure):

    >> 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'
    
    0 讨论(0)
  • 2021-02-14 08:44

    It's also possible to sort the entire structure.

    To build off of gnovice's example...

    % 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);
    
    0 讨论(0)
提交回复
热议问题