【问题标题】:Cell functions for nested cell arrays in MatlabMatlab中嵌套单元格数组的单元格函数
【发布时间】:2016-10-31 12:05:56
【问题描述】:

我想知道是否可以在嵌套元胞数组中使用元胞函数。

假设我有一个 3x3 元胞数组 AB,其中每个元素又是一个 3x3 元胞数组,其每个元素例如是一个 3x3 矩阵。

   A=cell(3,3);
   AB=A;
   for i=1:1:3
      for j=1:1:3
          AB{i,j}=cell(3,3)
      end
   end

如果我想在每个矩阵中进行操作,从而在单元格数组的每个元素的每个元素中进行操作(抱歉,这听起来很糟糕),它将如何工作?

一个例子是,如果你想建立矩阵行的总和,像这样......

    AB2=cellfun(@sum,AB);

    AB2=cellfun(@sum,AB{:,:});

但这不起作用。我尝试了多种匿名函数的组合,但它们也不起作用。 有没有办法做到这一点,还是我需要把 cellfun 放在一个循环中?

感谢您的帮助。

安娜

【问题讨论】:

    标签: matlab cell-array


    【解决方案1】:

    cellfun 如果您有一个未嵌套的单元格数组,即单级单元格,则可以使用。例如,如果您将数组定义为 3×3×3×3 矩阵元胞数组,您只需要

    result = cellfun(@(x) sum(x,1), AB, 'uniformoutput', false);
    

    如果你真的需要做一个矩阵元胞数组的元胞数组,你可以嵌套两个cellfun。这会很慢:

    result = cellfun(@(ab) cellfun(@(x) sum(x,1), ab, 'uniformoutput', false), AB, 'uniformoutput', false);
    

    我使用sum(x,1) 来获取每个矩阵的总和。如果您想要每个 的总和,请将 1 替换为 2

    【讨论】:

    • 非常感谢您的快速回复!我已经尝试使用第一个选项并且它有效,但我需要继续使用单元格数组的第二部分 - 比如说单元格数组{a,b,c,d} - 使用 c 和 d 中的元素。如果我想使用cell2mat 将其转换为用于以下操作的矩阵,我想我需要保持嵌套单元格数组的形状,我可以使用cell2mat 应用您的第二个选项(使用两个嵌套cellfunsum.
    • 既然你提到第二个选项比较慢,有没有其他方法可以做到这一点?或者当单元格数组的形式为{a,b,c,d} 时,是否有办法将 c 和 d 转换为保持 {a,b} 为包含 [c,d] 的单元格数组的矩阵?再次感谢您的帮助!
    • @Anna 我不明白你的意思,抱歉。也许一个小的数字示例会有所帮助
    • 抱歉,也许这有助于理解我的意思:A1=cellfun(@(ab) cellfun(@(x) sum(x,1), ab, 'uniformoutput', false), AB, 'uniformoutput', false); %A1{a,b}{c,d}[1,1], AB=A{a,b}{c,d}[1,30]A2=cellfun(@cell2mat, A1, 'uniformoutput', false); %A2{a,b}[c,d] A3=cellfun(@sum, A2, 'uniformoutput', false); %A3{a,b}[c,1] B1= cellfun(@(x) sum(x,1), AB, 'uniformoutput', false); %B1{a,b,c,d}B2...?您将如何重塑 B2 以使其具有 {a,b}[c,d] 形式以便您可以进行其他操作?
    猜你喜欢
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多