Как суммировать столбцы в парах матрицы в Matlab? - PullRequest
3 голосов
/ 23 августа 2011

Например, если

A=[ 0 1 2 3 4 5 6 7 8 9; 0 1 2 3 4 5 6 7 8 9; 0 1 2 3 4 5 6 7 8 9]

A =

 0     1     2     3     4     5     6     7     8     9
 0     1     2     3     4     5     6     7     8     9
 0     1     2     3     4     5     6     7     8     9

Как я могу получить этот глупый трюк?

sumA =

 1     5     9    13    17
 1     5     9    13    17
 1     5     9    13    17

Ответы [ 2 ]

6 голосов
/ 23 августа 2011
sumA = A(:,1:2:end) + A(:,2:2:end);
2 голосов
/ 06 октября 2011

Вы можете сделать это без использования цикла, переставив массив в 3D и затем суммируя.

Основная идея состоит в том, чтобы изменить форму в 2D, транспонировать, изменить в 3D и затем суммировать обратно в 2D.

%test case

mat     =   repmat([1 2 3 4 5 6],3,1);  %test matrix

nCol    =   3;  %number of columns to sum


if mod( size(mat,2), nCol) == 0

   res     =   sum( reshape( reshape( mat, size(mat,1)*nCol , [] )',[size(mat,2)./nCol, size(mat,1), nCol] ),3)';

end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...