2011-12-23 44 views
5

Tôi có 2 cột dữ liệu được nhập từ việc sử dụng textcan. Các dữ liệu trông như thế này ở đâu UundetectD được phát hiệncác cột sắp xếp trong Matlab

mydata= 

.51 U 
.57 D 
.48 U 
.47 D 

my data = [4x1 double] [4x1 char] 

Tôi muốn sắp xếp dữ liệu theo cột đầu tiên và do đó dữ liệu sẽ trông như thế này

.47 D 
.48 U 
.51 U  
.57 D 

Tôi muốn bảo toàn cấu trúc ô để lệnh sau chỉ định giá trị logic vẫn giữ đúng:

c = zeros(size(mydata,1),1); % preallocate empty matrix 

c = mydata{2} == 'U'; 
for i = 1:size(mydata,1) 
     curValue = mydata{i,2}; 
     data{i,3} = ~isempty(curValue) && ischar(curValue) && strcmp(curValue ,'U'); 
end 

Tôi đọc về sắp xếp nhưng hàm được sử dụng để sắp xếp ma trận chỉ chứa số.

Có ai có giải pháp phân loại mảng với hỗn hợp số và ký tự không.

Trả lời

8

Bạn có thể SORT bởi một vectơ và áp dụng chỉ mục sắp xếp cho một véc tơ khác.

[mydata{1},idx] = sort(mydata{1}); 
mydata{2} = mydata{2}(idx); 
+0

Ồ, đẹp hơn tôi. :) Bạn có thể làm cho nó thậm chí simper bằng cách thay thế 'cell2mat (mydata (:, 1)' bởi 'mydata {1}' – 3lectrologos

+0

@ 3lectrologos: Tìm thấy lỗi của tôi và sửa chữa trước khi tôi nhìn thấy câu trả lời và bình luận của bạn. cấu trúc dữ liệu trong câu hỏi – yuk

+0

Cảm ơn 3lectrologos và yuk. Cả hai mã đều hoạt động! – user1009166

2

Tôi không nghĩ bạn có thể trực tiếp sắp xếp mảng ô, vì mỗi ô được xem là một "thực thể" khác nhau. Bạn luôn có thể sắp xếp các số, sử dụng các chỉ số để sắp xếp các ký tự và sau đó đặt nó trở lại trong mảng ô:

nums = mydata{1}; 
chars = mydata{2}; 
[~, ind] = sort(nums); 
sortednums = nums(ind); 
sortedchars = chars(ind); 
mydata{1} = sortednums; 
mydata{2} = sortedchars; 
Các vấn đề liên quan