2011-12-23 69 views
5

我有2列使用textscan導入的數據。數據是這樣的,其中ü的undetectd檢測Matlab中的排序列

mydata= 

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

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

我希望將數據由第一列進行排序,以便將數據看起來像這樣

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

我想保留單元格結構,以便下列命令分配邏輯值仍然成立:

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 

我閱讀了有關sortrows的內容,但函數用於對包含數字的矩陣進行排序。

有沒有人有解決方案用數字和字符混合排序數組。

回答

8

您可以通過一個向量SORT並將排序索引應用於另一個向量。

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

噢,那比我的更好。 :)你可以通過用'mydata {1}'替換'cell2mat(mydata(:,1)')來使它變得更簡單。 – 3lectrologos 2011-12-23 20:52:02

+0

@ 3lectrologos:發現我的錯誤並在我看到你的回答和評論之前得到糾正。數據結構中的問題 – yuk 2011-12-23 20:55:58

+0

謝謝3lectrolytes和yuk。 – user1009166 2011-12-23 21:40:04

2

我不認爲你可以直接對單元格數組進行排序,因爲每個單元格都被認爲是不同的「實體」。您可以隨時對數字進行排序,使用索引對字符進行排序,然後將其放回單元格數組中:

nums = mydata{1}; 
chars = mydata{2}; 
[~, ind] = sort(nums); 
sortednums = nums(ind); 
sortedchars = chars(ind); 
mydata{1} = sortednums; 
mydata{2} = sortedchars;