【问题标题】:How to separate one cell element into two separate cell elements in MATLAB如何在MATLAB中将一个单元格元素分成两个单独的单元格元素
【发布时间】:2016-09-15 02:39:43
【问题描述】:

我有一个如下所示的元胞数组:

abc = {[1,0,1,0];[1,1,0,1];[1,1,1,0]};

我想像这样将每个单元格元素分成两组:

abc(:,2) = {[1,0];[1,1];[1,1]};
abc(:,3) = {[1,0];[0,1];[1,0]};

我尝试使用这个语句来做到这一点:

abc(:,2:3) = cellfun(@(x) mat2cell(x,[1],[2,2]),abc(:,1),'uni',0);

但是这个语句给出了以下错误:

赋值的非单例右轴维度少于非单例下标

当我尝试将其分配给 abc(:,2) 而不是 abc(:,2:3) 时,我得到了结果,但作为单元格中的一个单元格,这不是我的要求。

【问题讨论】:

    标签: matlab cell-array


    【解决方案1】:

    您不能直接分配给abc 的列2:3,因为cellfun 的输出与预期的维度不匹配。它是3 x 1,而abc(:,2;3)3 x 2。不过,您可以调用cat 使其工作。

    abc = {[1,0,1,0];[1,1,0,1];[1,1,1,0]};
    
    tmp = cellfun(@(x) mat2cell(x,[1],[2,2]),abc(:,1),'uni',0);
    abc(:,2:3) = cat(1, tmp{:});
    
    %// [1x4 double]    [1x2 double]    [1x2 double]
    %// [1x4 double]    [1x2 double]    [1x2 double]
    %// [1x4 double]    [1x2 double]    [1x2 double]
    

    不使用cellfun 的替代方案可能是。

    abc = {[1,0,1,0];[1,1,0,1];[1,1,1,0]};
    
    abc(:,2:3) = mat2cell(cat(1, abc{:}), ones(1,size(abc,1)), [2 2]);
    

    【讨论】:

    • 我想我将不得不使用第一个选项,因为 abc 只是来自另一个单元格的列,我为简单起见使用了它。我不能使用abc(:,2){:} 对吗?我将不得不以任何方式使用临时变量!但感谢这两种方式!
    • @EyesOfÖzil 你可以简单地做abc{:,2}
    • 现在我已经完全理解单元格 () 和 {} 之间的区别了!谢谢
    猜你喜欢
    • 2022-10-06
    • 2012-11-20
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 2014-03-09
    • 2013-08-06
    • 1970-01-01
    • 2022-06-12
    相关资源
    最近更新 更多