总结一个单元格数组?

时间:2013-05-20 05:02:27

标签: matlab

我有一个函数可以将任意数量的参数引入单元格数组

function sumThese(varargin)

subtotals = cellfun(@sum, varargin);
total = sum(subtotals);

disp(total)
end 

这适用于数组和数字,除非我有方形矩阵,否则它不会。它会告诉我:

  

Uniform输出中的非标量,将'UniformOutput'设置为false。

但是,如果我将'uniformoutput'设置为false,我现在会收到此错误:

  

未定义的函数或方法'sum'用于'cell

类型的输入参数

如何处理?

1 个答案:

答案 0 :(得分:3)

更改@sum

中的cellfun功能
subtotals = cellfun( @(x) sum(x(:)), varargin );

<强>为什么吗
因为sum的输出,当应用于矩阵时不再是标量将subtotals转换为标量和向量的单元格数组而不是1D向量。

使用调试器查看差异。

PS,
您知道吗cellfun is not always better than a simple loop

修改
使用for循环的解决方案:

total = 0;
for ii = 1:numel(varargin)
    total = total + sum( varargin{ii}(:) );
end