2013-03-02 132 views
0

我已經完成了很多搜索,到目前爲止還找不到滿意的答案,所以如果已經提出這個問題,我很抱歉。Matlab:數組求和總和

我被困在如何總結一個數組的維度。我有數組A(w0,lambda,2048,2048),並且我希望能夠定義第二個數組U(w0,2048,2048),它由A和維數lambda的和組成。

到目前爲止,我已經確定這兩個A和U如下:

A = zeros(length(w0),length(lambda),2048,2048); 
U = zeros(length(w0),2048,2048); 
for ii = 1:length(w0)     % Scan through spot sizes 
    for aa = 1:length(lambda)   % Scan through wavelengths 
      A(ii,aa,:,:) = ASM(w0(ii),lambda(aa),z1,z2); 
    end 
    U(ii,:,:) = sum(A,2); 
end 

哪裏ASM僅僅是一個函數。 z1和z2在前面定義,在這裏不相關。

我一直在試圖想出發現U(w0,2048,2048)的總和超過A(拉姆達)的第二維度的其他可能的方法,但都沒有成功...

感謝您的指點,並再次抱歉,如果這已經解決!

James。

回答

1

從它的聲音,你只是想:

U = squeeze(sum(A, 2)); 

squeeze()消除了單維度。

這裏有兩個替代解決方案:

U = reshape(sum(A, 2), [length(w0) 2048 2048]); 

或:

U = sum(A, 2); 
U = U(:, 1, :, :); 
+0

非常感謝!現在用第一種方法工作。之前還沒有遇到過squeeze()函數 - 對matlab來說很新穎。 – James 2013-03-02 16:34:45

0

嘗試使用上所需的尺寸與尺寸參數 'sum' 功能,和崩潰的結果。

z = rand(2,3,2,2); 
q = sum(z,2); %sum all 3 matrices of size 2x2x2 to get 2x1x2x2 result 
zz = q(:,1,:,:); %zz is now 2x2x2, by collapsing the dimension 2. 
+0

非常感謝您花時間回答!總是儘可能多的方式來做這些事情。我選擇了Oli Charlesworth的第一個選項,儘管 - 代碼略少。 – James 2013-03-02 16:35:45