在 MATLAB 中对数组的分区进行排序
Sort a partition of an array in MATLAB
我有以下大小为 1x9
的元胞数组 A
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'}};
我想根据单元格中元素的数量,从第五个元素 A{5:9}
开始对该单元格数组的分区进行排序。我已经尝试了 sort
函数,但似乎没有用
[P,I] = sort(cellfun('length',A{5:9}));
A = A(I);
还有什么方法可以在排序后跟踪 cellarray 的原始索引?
可以通过以下代码进行排序/
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]
单元格 6
在修改后的 A
中的原始位置是 finalOrder(6) = 7
.
我有以下大小为 1x9
的元胞数组A
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'}};
我想根据单元格中元素的数量,从第五个元素 A{5:9}
开始对该单元格数组的分区进行排序。我已经尝试了 sort
函数,但似乎没有用
[P,I] = sort(cellfun('length',A{5:9}));
A = A(I);
还有什么方法可以在排序后跟踪 cellarray 的原始索引?
可以通过以下代码进行排序/
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]
单元格 6
在修改后的 A
中的原始位置是 finalOrder(6) = 7
.