【问题标题】:moving empty cells in 2D cell array移动二维元胞数组中的空元胞
【发布时间】:2015-09-29 14:29:04
【问题描述】:

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

【问题讨论】:

  • 单元格数组仍然必须是“矩形”,因此您可以轻松删除整个行或列,但不能删除单个单元格。是否只想将所有空单元格移到各自行的末尾?
  • 但是你的单元格结构会改变,你必须在最后将它补零,最好将 [] 移动到单元格结构的最后一行/列而不是删除它们
  • 你是对的!我编辑了帖子:)

标签: arrays matlab cell-array


【解决方案1】:
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 仅包含零和一。
  • Linear indexing 可以通过 bsxfun 高效完成。 (可以改用repmatsub2ind。)

【讨论】:

  • 很好的答案!效率也很高
  • @GameOfThrows 谢谢!
  • :太棒了!这正是我想要的!非常感谢! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-20
  • 1970-01-01
相关资源
最近更新 更多