2017-11-09 10 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); 

정렬 후 cellarray의 원래 인덱스를 추적 할 수있는 방법이를 작동하는 것 같다했던에 의해 다음과 같이 나는 sort 기능을 시도? 귀하의 경우

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

:

답변

3

소팅 다시 I 사용

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 

셀 어레이의 초기 및 최종 순서 간의 매핑

찾을 수/다음 코드로 수행 될 수있다 : finalOrder = [1 2 3 4 5 7 6 8 9] 수정 된 A의 셀 6의 원래 위치는 finalOrder(6) = 7입니다.