Как суммировать строку 3d Matrix по интервалам в Matlab? - PullRequest
0 голосов
/ 28 января 2019

У меня есть 36x256x2232 3d матрица в Matlab, созданная M = ones(36,256,2232), и я хочу уменьшить размер матрицы на сумму строк к интервалу 3. Матрица результата должна быть 12x256x2232, и каждая ячейка должна иметь значение3.

Я пытался использовать функции reshape и sum, но получаю матрицу 1x256x2232.

Как я могу это сделать без использования for-loop?

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Вы можете использовать функцию new-ish splitapply (которая аналогична accumarray, но может обрабатывать данные с несколькими измерениями).Этот подход работает, даже если число строк не кратно размеру группы:

M = ones(4,5,2); % example data
n = 3; % group size
result = splitapply(@(x)sum(x,1), M, floor((0:size(M,1)-1).'/n)+1);
0 голосов
/ 28 января 2019

Это должно сделать это:

M = ones(36,256,2232)
reduced = reshape(sum(reshape(M, 3,[], 256,2232), 1),[], 256, 2232);
  • reshape создает 4-мерную матрицу с заданными интервалами
  • sum уменьшить ее
  • второе изменение формыпреобразовать его в 3d снова

Вы также можете использовать squeeze, который удаляет одноэлементные размеры:

reduced = squeeze(sum(reshape(M, 3,[], 256,2232), 1));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...