1

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

function sumThese(varargin)

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

disp(total)
end 

这适用于数组和数字,除非我有一个方阵,但它没有。它会告诉我:

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

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

'cell'类型的输入参数的未定义函数或方法'sum'

如何解决这个问题?

4

1 回答 1

3

更改函数@sum中的cellfun

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

为什么?
因为 , 的输出sum在应用于矩阵时不再是标量,而是变成subtotals标量和向量的元胞数组,而不是一维向量。

使用调试器查看差异。

PS,
你知道这cellfun并不总是比一个简单的循环更好

编辑:
使用for循环的解决方案:

total = 0;
for ii = 1:numel(varargin)
    total = total + sum( varargin{ii}(:) );
end
于 2013-05-20T05:08:52.160 回答