我正在使用MATLAB中使用颜色直方图交集的图像检索系统。此方法为我提供以下数据:表示直方图交叉距离的实数和图像文件名。因为它们是不同的数据类型,我将它们存储在具有两个字段的结构数组中,然后我将此结构保存在.mat文件中。现在我需要根据直方图交叉距离按降序对此结构进行排序,以检索具有最高直方图交叉距离的图像。我已经尝试了很多方法来对这些数据进行排序但没有结果。请问你能帮我解决这个问题吗?
答案 0 :(得分:15)
也可以对整个结构进行排序。
建立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);
答案 1 :(得分:12)
以下是使用函数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(as Shaka suggested)。例如(使用上述结构):
>> 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'