Сумма массивов M x N x P в массиве ячеек R x 1 элемент за элементом

У меня есть массив ячеек 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
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
0
46
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Если вам действительно нужен массив ячеек, сначала объедините его по четвертому измерению, чтобы создать массив 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 применяет функцию к каждая ячейка, тогда как вы хотите применить функцию (сумму) к каждая запись всех ячеек.

У меня есть массив ячеек, потому что у меня большое значение R, и создание 4D-массива может привести к проблемам с памятью при выполнении суммы в целом. Я могу сделать функцию, чтобы другие переменные не «мешали», если это необходимо.

WnGatRC456 04.01.2019 23:37

Так что, возможно, для начала используйте 4D-массив. Массив ячеек занимает больше памяти, чем эквивалентный 4-мерный массив. Попробуйте например A = {ones(3,2,4), ones(3,2,4), ones(3,2,4)}; B = cat(4, A{:}); whos A B

Luis Mendo 04.01.2019 23:53

Я не знал об этом.

WnGatRC456 04.01.2019 23:54

Другие вопросы по теме