2013-05-20 193 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 –