2017-11-09 8 views
1

におけるアレイのパーティションI有しサイズ1x9の次のセルアレイAソートMATLAB

A= {{'O1'} ,{'O1','O2','O3','O4'} ,{'O1','O3'} ,{'O1','O2','O3','O4'} , {},{'O1','O2','O3','O4'},{'O1','O3'},{'O1','O2','O3','O4'},{'O1','O2','O3','O4'}}; 

Iの中の要素の数に応じて5番目の要素A{5:9}を開始このセルアレイのパーティションをソートします細胞。

[P,I] = sort(cellfun('length',A{5:9})); 
A = A(I); 

を動作するようですなかったことでもソートした後セルアレイのオリジナル指標を追跡するためにどのような方法があり、以下のように私はsort機能を試してみましたか?

答えて

3

ソート次のコード/

A= {{'O1'} ,{'O1','O2','O3','O4'} ,{'O1','O3'} ,{'O1','O2','O3','O4'} , {}, 

{'O1','O2','O3','O4'},{'O1','O3'},{'O1','O2','O3','O4'},{'O1','O2','O3','O4'}}; 
disp('Before sorting') 
for ii = 1:numel(A) 
    fprintf('%d: %s\n',ii, cell2str(A{ii})); 
end 
a=A(5:end); 
[P,I] = sort(cellfun(@(x) numel(x),a)); 
A(5:end) = a(I); 
clear a 

disp('After sorting') 
for ii = 1:numel(A) 
    fprintf('%d: %s\n',ii, cell2str(A{ii})); 
end 

セルアレイの最初と最後の順番の間のマッピングが再びIを使用して見つけることができるで行うことができる:あなたのケースで

originalOrder = 1:numel(A); 
finalOrder = originalOrder; 
o = originalOrder(5:end); 
finalOrder(5:end) = o(I); 
clear o 

finalOrder = [1 2 3 4 5 7 6 8 9] 変更されたAのセル6の元の位置はfinalOrder(6) = 7でした。