2014-02-20 3 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 
Смежные вопросы