Суммирование массивов внутри ячеек

У меня есть код в MATLAB, который создает массивы 1000 x 1000 в циклах, которые выполняются десять раз; чтобы попытаться сохранить все эти циклы, я фиксирую эти массивы в ячейке; Теперь у меня есть ячейка 1 x 10 с именем PL, каждый элемент которой представляет собой массив 1000 x 1000; Я хочу суммировать их самым простым способом, чтобы получить один вывод 1000 x 1000. я пытался использовать

PLtot = cellfun(@sum,PL, 'UniformOutput',false);

но у меня это вообще не работает - есть идеи? Я уверен, что это должно быть просто, но с головной болью!


person DRG    schedule 04.12.2013    source источник
comment
Какой у вас язык программирования?   -  person AdamL    schedule 04.12.2013
comment
Извините, я должен был указать это - это в MATLAB... (сейчас добавлю в тег!)   -  person DRG    schedule 04.12.2013


Ответы (3)


Вместо того, чтобы хранить ваш массив в cellarray.

Просто добавьте дополнительное измерение к исходному массиву. Всегда заранее выделяйте размер массива.

PL = zeros(1000,1000,10);

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

PLtot = sum(PL,3);
person Vuwox    schedule 04.12.2013
comment
Вы точно имеете в виду PLtot = sum(PL,3);? - person Luis Mendo; 05.12.2013
comment
Точно сожалею об этом. - person Vuwox; 05.12.2013

Для меня работает следующее:

PLtot =  sum(cat(3,PL{:}),3);

Он объединяет массивы в 3-м измерении, а затем просто суммирует по этому измерению.

person Rich Nicholson    schedule 04.12.2013

Ваш код правильный, поэтому вы не должны получить ошибку. Я думаю, вы просто недовольны результатом.

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

PLtotcell = cellfun(@sum,PL, 'UniformOutput',false); % 
PLtot = cell2mat(PLtotcell');

Должен сказать, что это не самый эффективный способ в вашем случае. Проверьте другие ответы для лучшей производительности. Я просто хотел, чтобы вы поняли, как работает ваш код.

person yuk    schedule 04.12.2013