【问题标题】:Matlab How to perform substraction for multiple cell arrays?Matlab如何对多个单元格数组执行减法?
【发布时间】:2014-11-10 02:16:55
【问题描述】:

以下代码仅适用于 2 个元胞数组,分别名为 BC

A=cellfun(@minus, B, C, 'UniformOutput', false)

我想执行一个循环,以便能够对我的所有单元格数组执行减法。 B{i} 和 C{i} 的示例如下:

B{1}=[0.435] 
B{2}=[0.333] [0.532] 
B{3}=[0.021] [0.432] [0.312]        //command window output

C{1}=[0.211] 
C{2}=[0.243] [0.116] 
C{3}=[0.553] [0.212] [0.375]        //command window output

B{1}-C{1}
B{2}-C{2}
B{3}-C{3}

我试图在 ABC 后面包含 {i} 以变成类似:

A{i}=cellfun(@minus, B{i}, C{i}, 'UniformOutput' , false)

但是,它似乎不起作用。有什么解决办法吗?谢谢

【问题讨论】:

  • 当你删除它时,我实际上正在为你的earlier question写一个答案......请避免重新发布问题!
  • 很抱歉给您带来不便。多个单元阵列的 cellfun 是什么?因为它只能在两个之间减去。
  • 你发布的代码甚至不是有效的语法,你不能写C{3}=[0.553] [0.212] [0.375]!下次包含我们可以实际复制/粘贴的代码,它会工作
  • 这些实际上是我的命令窗口输出。
  • 我知道,但这只是让我们更难为您提供帮助。您可以看到您之前的问题正是因为这个原因而出现了混淆,其他人只是无法弄清楚格式您的数据在其中。您的问题越清晰,您获得有用答案的机会就越大。

标签: matlab loops cell-array subtraction


【解决方案1】:

编辑:

您有不必要的嵌套元胞数组,即B 是元胞数组的元胞数组,B{i} 是数字元胞数组。

如果您想保持这种格式,这是使用cellfun 计算结果的一种方法(A 也将是数字单元数组的单元数组):

% exiting data
B = cell(3,1);
B{1} = {0.435};
B{2} = {0.333, 0.532};
B{3} = {0.021, 0.432, 0.312};
C = cell(3,1);
C{1} = {0.211};
C{2} = {0.243, 0.116};
C{3} = {0.553, 0.212, 0.375};

A = cellfun(@(b,c)cellfun(@minus, b, c, 'Uniform',false), B, C, 'Uniform',false);

否则我建议您减少嵌套级别,并改用它:

% note the difference between square-brackets and curly-brackets
B = cell(3,1);
B{1} = [0.435];
B{2} = [0.333, 0.532];
B{3} = [0.021, 0.432, 0.312];
C = cell(3,1);
C{1} = [0.211];
C{2} = [0.243, 0.116];
C{3} = [0.553, 0.212, 0.375];

现在您可以使用单个 cellfun(无嵌套)计算结果:

A = cellfun(@minus, B, C, 'Uniform',false)

【讨论】:

  • 我的 B{i} 和 C{i} 由不同大小的数组组成,但每次 B{i} 减去 C{i} 时,它们的大小都是相同的。我需要循环它们。上面是一个简单的 3 号单元格示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-10
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 2022-09-23
相关资源
最近更新 更多