1

任意の数の引数をセル配列に取り込む関数があります

function sumThese(varargin)

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

disp(total)
end 

これは、配列と数値に対して機能しますが、正方行列があるとすぐには機能しません。それは私に教えてくれます:

Uniform 出力の非スカラー。'UniformOutput' を false に設定します。

ただし、に設定'uniformoutput'するとfalse、次のエラーが発生します。

タイプ「セル」の入力引数の未定義の関数またはメソッド「合計」

これにアプローチする方法は?

4

1 に答える 1

3

@sumの関数を変更します。cellfun

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

なんで?
の出力がsum行列に適用されると、スカラーではなくなりsubtotals、1D ベクトルではなく、スカラーとベクトルのセル配列になるためです。

デバッガーを使用して違いを確認します。

PS、単純なループよりも常に優れているとは限らない
ことをご存知でしたか。cellfun

編集:ループ
を使用したソリューション:for

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