【问题标题】:Summing a cell array?对单元格数组求和?
【发布时间】:2013-05-14 14:54:09
【问题描述】:

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

function sumThese(varargin)

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

disp(total)
end 

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

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

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

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

如何解决这个问题?

【问题讨论】:

    标签: matlab


    【解决方案1】:

    cellfun中更改函数@sum

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

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

    使用调试器查看差异。

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

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

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

    【讨论】:

    • 谢谢你的作品!你能给我一个关于如何循环的提示吗?
    • 跟进,如果其中一个参数是元胞数组怎么办?然后 sum 将无法使用它,因为它是 cell 类型...
    • @rawrrang 如果某些单元格中有NaNs 怎么办?如果有字符串/字符怎么办?您应该知道您的输入...如果输入非常复杂,您应该将简单的 sum 函数替换为您将编写的可以处理所有这些特殊情况的更复杂的函数...
    猜你喜欢
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2015-08-13
    • 2016-10-24
    • 1970-01-01
    相关资源
    最近更新 更多