2014-02-20 129 views
0

给定一个多维数组A = MxMxMx ... xM,其中ndims(A)= n。我的问题可以用下面的伪代码来描述:如何遍历多维数组

tmp = A(i, :, :, :, ..., :) 
sum(tmp(:)) i = 1, ... M 
tmp = A(:, i, :, :, ..., :) 
sum(tmp(:)) i = 1, ... M 
    ... 
tmp = A(:, :, :, :, ..., i) 
sum(tmp(:)) i = 1, ... M 

让我用一个例子来说明它。

C = 1:81; 
A = reshape(C, 3, 3, 3, 3); 
result = zeros(3, 4); 
for i = 1 : 3 
    tmp = A(i, :, :, :); 
    result(1, i) = sum(tmp(:)); 
end 
for i = 1 : 3 
    tmp = A(:, i, :, :); 
    result(2, i) = sum(tmp(:)); 
end 
for i = 1 : 3 
    tmp = A(:, :, i, :); 
    result(3, i) = sum(tmp(:)); 
end 
for i = 1 : 3 
    tmp = A(:, :, :, i); 
    result(4, i) = sum(tmp(:)); 
end 

我真的不知道该怎么做。谁能帮我?

感谢

+2

这是不容易理解。你能用一个3x3x3矩阵来说明吗? –

+0

@ RobertP.我补充了一个例子。感谢您的建议。 – Fihop

回答

2

如何

sumsAlongDims = zeros(M, n); % M sums per dim 
for dim = 1:n 
    tmp = permute(A, [dim 1:(dim-1) (dim+1):n]); % bring dim to front 
    tmp = reshape(tmp, M, []); % make it 2D 
    sumsAlongDims(:, dim) = sum(tmp, 2); % gives to the m sums along each coordinate of dimension "dim" at once 
end