是否可以将空条目移动到2D单元格数组的末尾?例如。如果单元格(2,2)是[]
,单元格(3,2)将进入(2,2)的位置,(4,2)进入(3,2)等等,空单将出现例如,附加在最后一行。
答案 0 :(得分:4)
C = {1 []; [] 4; 'aa' []}; %// example cell array
e = cellfun('isempty', C); %// this indicates for each cell if it's empty or not
[~, r] = sort(e, 1); %// sorting of each col to move empty cells to the end
[m, n] = size(C);
C = C(bsxfun(@plus, r, (0:m:m*(n-1)))); %// apply sorting to each col, using linear indexing
在此示例中,C
最初是
C =
[ 1] []
[] [4]
'aa' []
并成为
C =
[ 1] [4]
'aa' []
[] []
一些评论:
sort
稳定:它会保留原始订单以防关系。请注意,e
只包含0和1。bsxfun
。 (repmat
和sub2ind
可以替代使用。)