在2D单元阵列中移动空单元格

时间:2015-09-29 14:29:04

标签: arrays matlab cell-array

是否可以将空条目移动到2D单元格数组的末尾?例如。如果单元格(2,2)是[],单元格(3,2)将进入(2,2)的位置,(4,2)进入(3,2)等等,空单将出现例如,附加在最后一行。

here

1 个答案:

答案 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。
  • 使用Linear indexing有效地完成了
  • bsxfun。 (repmatsub2ind可以替代使用。)