【问题标题】:Access nested cell array访问嵌套元胞数组
【发布时间】:2017-09-08 08:27:11
【问题描述】:

我有一个大小为 1x84 的单元格数组,其中元素是 1x1 或 1x2 单元格。

我希望通过从嵌套单元格中获取第一个元素来获得大小为 1x84 的单元格数组

CellList = <1x84 cell>

CellList  = <1x1 cell>  <1x1 cell>  <1x1 cell>  <1x2 cell>  <1x1 cell> ... <1x2 cell>       

子元素也是单元格


我尝试使用此代码:

CellList = cellfun(@(x)x{1,:}{1,:},CellList, 'UniformOutput',0);

但我遇到了以下错误:

error : Cell contents reference from a non-cell array object.

【问题讨论】:

    标签: matlab nested cell-array


    【解决方案1】:

    cellfun 访问你给它的单元格的每个元素,所以你正在获取一个元素x,试图访问它的第一个元素,以及不存在的第一个元素。

    你想用

    CellList2 = cellfun(@(x)x{1}, CellList, 'uniformoutput', false)
    

    编辑:

    您声称您仍然遇到错误,在这种情况下,您的问题无法重现。这是一些设置代码:

    % define a 1x84 cell array
    c = cell(1,84);
    % Make each element a 1x2 or 1x1 cell array 
    for n = 1:84; c{n} = cell(1,randi([1,2],1)); end;
    % Output is as you've described and shown
    >> c = <1x84 cell>
         = <1x2 cell> <1x1 cell> <1x1 cell> ... <1x2 cell>
    

    现在使用我上面的代码,它工作正常。

    d = cellfun(@(x)x{1},c,'uniformoutput',false);
    d = <1x84 cell>
      = [] [] [] [] ... []   % All empty elements as we initialised empty cells
    

    【讨论】:

    • 错误:来自非单元格数组对象的单元格内容引用。还是一样的错误
    • 然后请发布示例代码(在问题编辑中)生成一个等效的单元格数组以用于测试...例如,子元素实际上是单元格还是只是正规矩阵?
    • 对于 i = 1:84 c{i} = c{i}(1);上面的代码用很短的方法解决了我的问题。对不起,如果我的问题很困惑。我觉得你解释的内容在我的要求中非常复杂。
    • 这是什么意思?
    猜你喜欢
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多