2012-06-21 38 views
0

您好我已经填充用电池阵列中的每个细胞中的所有元素:MATLAB - cellfun总和

D(i) = {dist}; 

D = reshape(D, w, h) 

,这样,如果我有:

pix1 = D{1,1}; 
pix2 = D{2,2}; 

我得到

pix1 = 
    1 2 3 

pix2 = 
    4 5 6 

我想要做的就是将每个像素中的所有元素进行求和,然后将这些结果并形成一个矩阵,即

sum(pix1) = 6 
sum(pix2) = 15 

matrix = 
    6 15 

在这种情况下,矩阵是1X2矩阵(我的规模要大得多)。

我试图用这个做:

field = cellfun(@(dist) sum(dist(:)), D,'UniformOutput', false); 

但这只是给我一个完整的NaN的矩阵。我哪里错了?

回答

2
A = {[1 2 4], [4 5 6]}; 
B = cellfun(@sum, A) 

结果

B = [6月15日]

B = [7 15] 
+0

如果我有一个2×2单元阵列?即 A = [1X3 double] [1x3 double] \ n [1x3 double] [1x3 double] 您发布的代码似乎不适用于本示例,我将如何更改您的代码一个2x2单元阵列?或甚至nxn?感谢您的回复。 – brucezepplin

+1

@brucezepplin:你确定?它工作得很好。例如:'A = {[1 2 4],[4 5 6]; [1 2 4],[4 5 6]};'然后'B = cellfun(@sum,A)' – Amro

0

如果你有NaN在你的细胞,你希望忽略它们,你可以使用nansum

A = {[1, 2, NaN], [3, NaN, 4, 5]; [6, NaN], [10, -3, NaN, 4]}; 
B = cellfun(@nansum, A) 

结果与

B = 

    3 12 
    6 11