2013-05-20 190 views
1

我有一个函数,它在任意数量的参数成单元阵列求和单元格数组?

function sumThese(varargin) 

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

disp(total) 
end 

这适用于阵列和数字,除了当我有它不方阵。它会告诉我:

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

但是如果我设置'uniformoutput'false,现在我得到这个错误:

未定义的函数或方法“和”类型的输入参数“细胞

如何处理这个?

回答

3

变化在cellfun

subtotals = cellfun(@(x) sum(x(:)), varargin); 

为什么功能@sum
因为当应用于矩阵时sum的输出不再是标量,它将subtotals转换为标量和矢量的单元阵列,而不是一维矢量。

使用调试器查看差异。

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

编辑:
使用for环路A液:

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

感谢的作品!你能给我一个关于如何循环的提示吗? –

+0

非常感谢,很有道理 –

+0

Ahhh我查了回答,但忘了upvote T_T –