Суммируйте массивы M x N x P в элементе массива ячеек R x 1 по элементам - PullRequest
0 голосов
/ 05 января 2019

У меня есть массив ячеек R x 1 (R - количество строк), где каждая запись - это массив M x N x P. Как мне суммировать каждый массив в массиве ячеек, чтобы каждая запись добавлялась в каждый массив M x N x P? Могу ли я сделать это с cellfun?

Я нашел этот метод в аналогичном вопросе, но он возвращает массив 1 x N x P вместо массива M x N x P (см. B), или я получаю сообщение об ошибке "Ошибка using cell2mat «Слишком много входных аргументов» (см. C).

M = 3;
N = 2;
P = 4;

A{1,1} = ones(M,N,P);
A{1,2} = 2*ones(M,N,P);
A{1,3} = 3*ones(M,N,P);

B = sum([A{:}]);
C = sum(cell2mat(A{:}),1);

Я ожидаю получить массив M x N x P, но где каждый элемент является суммой всех элементов в расположении i, j, k каждого из элементов ячейки.

B(1,1) = 6  % for all entries

1 Ответ

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

Почему у вас есть массив ячеек? Вы можете хранить все трехмерные массивы одинакового размера в 4D-массиве, и тогда вам нужна только сумма по четвертому измерению.

Если вам действительно нужен массив ячеек, сначала соедините его по четвертому измерению, чтобы создать массив 4D, а затем сложите:

result = sum(cat(4, A{:}), 4);

Если вам нужно, чтобы массив ячеек и , объединяющийся в массив 4D, выдавал ошибку из-за недостатка памяти, вам может потребоваться прибегнуть к циклу:

result = zeros(size(A{1}));
for k = 1:numel(A)
    result = result + A{k};
end

Вы не можете использовать cellfun, по крайней мере, естественным образом, потому что cellfun применяет функцию к каждой ячейке , тогда как вы хотите применить функцию (сумму) к каждой запись всех ячеек.

...