2012-02-06 70 views
1

我想根據其中一列對單元格數組進行排序。該數組由textscan函數創建。網絡上有一些答案,但我仍然無法正常工作。我有以下數組:如何排序包含數組的單元格數組?

>> DATA 

DATA = 

    {303427x1 cell} {303427x1 cell} {303427x1 cell} {303427x1 cell} [303427x1 uint32] [303427x1 double] [303427x1 uint32] [303427x1 int32] {303427x1 cell} 

重要的是第六列,它們是由datenum函數轉換的時間。我想按這列對整個數據進行排序,但是要鏈接到另一列。 正常的排序或sortrows不適合我。請問你能幫幫我嗎?

+0

什麼是您的日期字符串的原始格式?你是否驗證過'datenum'輸出是好的? – 2012-02-06 23:21:30

+0

格式是YYYY-MM-DD HH:MM:SS,datenum的輸出是正確的,我檢查了它。 – user1193426 2012-02-07 10:28:13

+0

您可以通過單擊答案文本左側的複選標記圖標來標記答案「已接受」。 – 2012-02-08 02:20:49

回答

2

我把它想要在DATA的每個單元內排序,對嗎?函數datenum自「零年」開始產生連續時間戳,因此可以正常排序。

times = DATA{6}; 
[~,idx] = sort(times,'ascend'); 
for i=1:length(DATA) 
    DATA{i} = DATA{i}(idx); 
end 
+0

感謝它按我需要的方式工作 – user1193426 2012-02-07 19:27:37

1

您可以避免for循環使用CELLFUN你得到的排序指標idx後@ reve_etrange的答案。

DATA = cellfun(@(x) x(idx), DATA, 'UniformOutput', false); 
+0

只需注意一點,'cellfun'確實可以讓代碼適合一行,但它只是簡單地封裝了循環並增加了一些開銷(它不會以任何方式並行化)。最終只是一種風格選擇。 – 2012-02-07 06:50:02

+0

@reve_etrange - 檢出http://stackoverflow.com/questions/8881735/how-to-compute-effectively-string-length-of-cell-array-of-strings/8881819#8881819。 cellfun在某些情況下可以快得多。 – 2012-02-07 09:23:38

+0

@Andrey - 只有預定義的函數列表可以作爲字符串傳遞給'cellfun'。請參閱文檔的「向後兼容性」部分。 – 2012-02-07 09:27:24

相關問題