Предварительное выделение массива всегда хорошая идея в Matlab. Альтернатива - иметь массив, который увеличивается во время каждой итерации в цикле. Каждый раз, когда элемент добавляется в конец массива, Matlab должен создать совершенно новый массив, скопировать содержимое старого массива в новый, а затем, наконец, добавить новый элемент в конец. Предварительное выделение устраняет необходимость выделять новый массив и тратить время на копирование существующего содержимого массива в новую память.
Тем не менее, в вашем случае вы можете не увидеть столько выгод, сколько ожидаете. При копировании массива ячеек в новый, увеличенный массив ячеек Matlab фактически не нужно копировать содержимое массива ячеек (данные изображения), а только указатели на , которые данные.
Тем не менее, нет никаких причин не делать предварительное распределение (если вы заранее не знаете окончательный размер). Вот предварительно выделенная версия вашего цикла:
croppedSag = cell(1, sagNum);
for ii = 1:sagNum
croppedSag{ii} = imcrop(SagArray{ii}, rect);
end
Я также изменил индексную переменную "i" на "ii", чтобы она не перезаписывала мнимую единицу.
Вы также можете переписать этот цикл в одну строку, используя функцию cellfun:
croppedSag = cellfun(@(im) imcrop(im, rect), SagArray);
Вот запись в блоге, которая может быть информативной: