2009-09-30 3 views
10

저는 MATLAB에서 색상 히스토그램 교차를 사용하는 이미지 검색 시스템으로 작업하고 있습니다. 이 방법은 다음과 같은 데이터를 제공합니다 : 히스토그램 교차 거리를 나타내는 실수와 이미지 파일 이름. 그들은 서로 다른 데이터 유형이기 때문에 두 필드가있는 구조 배열에 저장 한 다음이 구조를 .mat 파일에 저장합니다. 이제 가장 높은 히스토그램 교차 거리를 가진 이미지를 검색하기 위해 내림차순으로 히스토그램 교차 거리에 따라이 구조체를 정렬해야합니다. 이 데이터를 정렬하는 많은 방법을 시도했지만 결과는 없습니다. 이 문제를 해결하도록 도와주세요.MATLAB에서 구조 배열을 정렬하는 방법은 무엇입니까?

답변

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 가장 높은 값을 얻을하려는 경우, 그리고 단지를 최대 값 인 경우 MAX (as Shaka suggested) 대신 SORT을 사용할 수 있습니다. 예를 들어 (위 구조 사용) :

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

당신은 또한 사용할 수 있습니다 ** 고양이 (1, s.value) ** 당신에게 답장을 보내 주셔서 너무 감사 – Amro

+0

값을 연결하는, 나는 시도 할 것이다 이 기능을 사용하십시오. 제발 내 matlab 대구를 보내 귀하의 이메일 주소를 얻을 수 있습니다 감사합니다 –

+0

@zenab : 내 이메일 주소는 내 프로필에 있습니다. 직접 토론하고 싶은 내용이 있으면 언제든지 줄을 써주십시오. – gnovice

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); 
+0

참고 : (또는 임의의 캐릭터 라인),'[~, order] = sort ({s.file});','sortedStruct = s (order);'를 실행합니다. Matlab의 이후 버전에서 구현되기 전까지는''descend''를 사용할 수 없습니다. –