Как отсортировать структурные массивы в MATLAB?
Я работаю с системой поиска изображений, использующей пересечение цветовой гистограммы в MATLAB. Этот метод дает мне следующие данные: действительное число, которое представляет расстояние пересечения гистограммы, и имя файла изображения. Поскольку они представляют собой разные типы данных, я сохраняю их в массиве структур с двумя полями, а затем сохраняю эту структуру в файле.mat. Теперь мне нужно отсортировать эту структуру по расстоянию пересечения гистограммы в порядке убывания, чтобы получить изображение с наибольшим расстоянием пересечения гистограммы. Я пробовал много способов сортировки этих данных, но безрезультатно. Пожалуйста, вы можете помочь мне решить эту проблему?
2 ответа
Вот один пример того, как вы могли бы сделать это, используя функцию MAX вместо сортировки:
%# 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;
РЕДАКТИРОВАТЬ: Если вы хотите получить N максимальных значений, а не только максимум, вы можете использовать SORT вместо MAX ( как предложил Shaka). Например (используя вышеуказанную структуру):
>> 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'
Также возможно отсортировать всю структуру.
Чтобы построить на примере Гновице...
% 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);