2013-03-02 51 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