Я бы использовал трюк, вдохновленный интегральными изображениями :
grid(ymin(n):ymax(n),xmin(n):xmax(n))=1;
эквивалентен:
grid(ymin(n),xmin(n))=1;
grid(ymin(n),xmax(n)+1)=-1;
grid(ymax(n)+1,xmin(n))=-1;
grid(ymax(n)+1,xmax(n)+1)=1;
grid=cumsum(cumsum(grid,1),2);
Так что для вашей проблемы я бы сделал:
grid = zeros(size+1,size+1);
grid=full( sparse(ymin,xmin,1,size+1,size+1)...
+sparse(ymax+1,xmax+1,1,size+1,size+1)...
-sparse(ymin,xmax+1,1,size+1,size+1)...
-sparse(ymax+1,xmin,1,size+1,size+1));
grid=cumsum(cumsum(grid,1),2);
grid=grid(1:end-1,1:end-1);
Я проверил это на своем ноутбуке.Результаты такие же:
Истекшее время для кода с циклом составляет 1,802788 секунд.
Истекшее время для векторизованного кода составляет 0,033834 секунды.