У меня есть массив ячеек 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), или я получаю сообщение об ошибке «Ошибка при использовании 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



Почему у вас вообще есть массив ячеек? Вы можете сохранить все трехмерные массивы одинакового размера в четырехмерном массиве, и тогда вам понадобится просто сумма по четвертому измерению.
Если вам действительно нужен массив ячеек, сначала объедините его по четвертому измерению, чтобы создать массив 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 применяет функцию к каждая ячейка, тогда как вы хотите применить функцию (сумму) к каждая запись всех ячеек.
Так что, возможно, для начала используйте 4D-массив. Массив ячеек занимает больше памяти, чем эквивалентный 4-мерный массив. Попробуйте например A = {ones(3,2,4), ones(3,2,4), ones(3,2,4)}; B = cat(4, A{:}); whos A B
Я не знал об этом.
У меня есть массив ячеек, потому что у меня большое значение R, и создание 4D-массива может привести к проблемам с памятью при выполнении суммы в целом. Я могу сделать функцию, чтобы другие переменные не «мешали», если это необходимо.