2012-07-18 41 views
0

嗨我有一個對象A,其中包含9個矢量的所有大小[1 3],三維向量。我如何總結所有這些創建一個新的向量大小[1 3],即如何獲取每個向量的貢獻,並將他們的每個貢獻加起來給我一個最終的向量。提前致謝。我的向量存儲在單元格數組中。一個是如何定義的:matlab sum vectors

ri = Rix{1,1}; 
rj = Riy{1,1}; 


vec2 = @(i)[ri(i), rj(i), 0]; 
A = arrayfun(vec2, reshape(1:numel(ri), size(ri)), 'UniformOutput', 0); 

,這是我到目前爲止已經試過:

B = cellfun(@(A)nansum(A(:))'un', 0); 

與此錯誤

??? b = cellfun(@(distance)nansum(distance(:))'un',0); | 錯誤:意外的MATLAB表達式。

+0

向我們展示A的定義和[你試過的東西](http://whathaveyoutried.com) – Thor 2012-07-18 15:00:11

+0

嗨,請看我的編輯。 – brucezepplin 2012-07-18 15:07:35

+0

'cellfun'不是去這裏的路,因爲你的結果只有一個向量元素,而不是幾個向量。就像@Vidar建議的那樣,'cell2mat'是解決這個問題的好方法。不管你的問題如何:你的'cellfun'語法錯誤。如果您想正確使用它,請閱讀[本文檔](http://www.mathworks.com/help/techdoc/ref/cellfun.html)。 – 2012-07-18 16:48:30

回答

3

這是你在找什麼?

dummy = [1 2 3]; 
A = {dummy;dummy;dummy;dummy;dummy;dummy;dummy;dummy;dummy} 
Asum = sum(cell2mat(A)); 

結果:

Asum = [9 18 27] 

正如你所看到的,cell2mat是這裏的竅門。

+0

HI Vidar - 這個工程。我爲我的案例做了一個小修改,因爲我有一個二維單元陣列,而不是一維數組。我的編輯是Asum = sum(cell2mat(A(:)));非常感謝您的幫助 – brucezepplin 2012-07-18 15:14:45

+0

+1:我建議儘量使用'Asum = sum(cell2mat({A {:}}))',這樣它也可以處理單元格數組'A'具有兩個維度的情況或者更多。 – 2012-07-18 16:44:08