Как сортировать структурные массивы в MATLAB?

Я работаю с системой поиска изображений, используя пересечение цветовой гистограммы в MATLAB. Этот метод дает мне следующие данные: реальное число, которое представляет расстояние пересечения гистограммы, и имя файла изображения. Поскольку это разные типы данных, я храню их в массиве структуры с двумя полями, а затем сохраняю эту структуру в a .файл мат. Теперь мне нужно отсортировать эту структуру в соответствии с расстоянием пересечения гистограммы в порядке убывания, чтобы получить изображение с наибольшим расстоянием пересечения гистограммы. Я пробовал много методов сортировки этих данных, но без результата. Пожалуйста, вы можете помочь мне решить эту проблему?

2 ответов


вот один пример того, как вы могли бы это сделать, используя функцию макс вместо того, чтобы разобраться:

%# 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: если вы хотите получить N самых высоких значений, а не только максимум, вы можете использовать вроде вместо MAX (как предложил Шака). Например (используя вышеуказанную структуру):

>> 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'

также можно отсортировать всю структуру.

построить на примере 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);