2009-09-30 67 views
10

Tôi đang làm việc với hệ thống truy xuất hình ảnh bằng cách sử dụng giao điểm biểu đồ màu trong MATLAB. Phương pháp này cung cấp cho tôi dữ liệu sau: một số thực đại diện cho khoảng cách giao giữa biểu đồ và tên tệp hình ảnh. Vì chúng là các kiểu dữ liệu khác nhau, tôi lưu trữ chúng trong mảng cấu trúc với hai trường, và sau đó tôi lưu cấu trúc này trong một tệp .mat. Bây giờ tôi cần phải sắp xếp cấu trúc này theo khoảng cách giao giữa biểu đồ theo thứ tự giảm dần để lấy lại hình ảnh có khoảng cách giao giữa biểu đồ cao nhất. Tôi đã thử nhiều phương pháp để sắp xếp dữ liệu này nhưng không có kết quả. Bạn có thể giúp tôi giải quyết vấn đề này không?Làm thế nào để sắp xếp các mảng cấu trúc trong MATLAB?

Trả lời

12

Dưới đây là một ví dụ về cách bạn có thể làm điều này, sử dụng chức năng MAX thay vì phải sắp xếp:

%# 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ếu bạn muốn để có được giá trị cao nhất N, và không chỉ là tối đa, bạn có thể sử dụng SORT thay vì MAX (as Shaka suggested). Ví dụ: (sử dụng cấu trúc trên):

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

bạn cũng có thể sử dụng ** mèo (1, s.value) ** để nối các giá trị – Amro

+0

Cảm ơn bạn rất nhiều vì trả lời, tôi sẽ cố gắng để sử dụng chức năng này. Tôi có thể lấy địa chỉ email của bạn để gửi cho bạn mã số cá nhân matlab của tôi cảm ơn –

+0

@zenab: Địa chỉ email của tôi nằm trong tiểu sử của tôi. Hãy thả cho tôi một dòng nếu bạn có bất cứ điều gì bạn muốn thảo luận trực tiếp. – gnovice

15

Cũng có thể sắp xếp toàn bộ cấu trúc.

Xây dựng tắt của dụ gnovice của ...

% 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

Lưu ý: để sắp xếp theo tên tệp (hoặc bất kỳ chuỗi nào), bạn sẽ làm '[~, order] = sort ({s.file});', rồi 'sortStruct = s (thứ tự);'. Bạn không thể sử dụng ''descend'' trong trường hợp đó, cho đến khi điều này được thực hiện trong một số phiên bản tương lai của Matlab. –

Các vấn đề liên quan