2012-02-06 15 views
1

私は列の1つに従ってセル配列をソートしたいと思います。配列はtextscan関数によって作成されます。ウェブ上にはいくつかの回答がありますが、それでも動作させることはできません。私は次の配列を持っています:配列を含むセル配列をソートする方法は?

>> DATA 

DATA = 

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

重要なのはdatenum関数で変換された第6列です。私は、この列ではなく、別の列へのリンクでDATA全体をソートしたいと思います。 通常の並べ替えや並べ替えは機能しません。私を手伝ってくれますか?

+0

日付文字列の元の形式は何ですか? 'datenum'出力が良いかどうか確認しましたか? –

+0

形式はYYYY-MM-DD HH:MM:SSで、datenumの出力は正しいです。確認しました。 – user1193426

+0

回答テキストの左側にあるチェックマークアイコンをクリックすると、回答を「受け入れ」にすることができます。 –

答えて

2

私はそれをDATAの各セル内で並べ替えたいですか? datenum関数は、 "年ゼロ"からシリアルタイムスタンプを生成するため、通常のソートが可能です。

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

ありがとうございます。 – user1193426

1

あなたは、ソートインデックスidxを取得した後は、関数cellfunを使用しての@ reve_etrangeの答えにforループを回避することができます。

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

ちょっとメモしておきますが、 'cellfun'はコードを1行に収めることができますが、単純にループをラップして少しオーバーヘッドを追加します(並列化しません)。最終的にはちょうどスタイルの選択。 –

+0

@reve_etrange - http://stackoverflow.com/questions/8881735/how-to-compute-effectively-string-length-of-cell-array-of-strings/8881819#8881819をご覧ください。 cellfunは場合によってははるかに高速になる可能性があります。 –

+0

@Andrey - 文字列として 'cellfun'に渡すことができる関数の定義済みリストでのみ。ドキュメントの「下位互換性」を参照してください。 –

関連する問題