Вместо цикла используйте двоеточия.Например:
for i3 = 1:2
for j3 = 1:2
MArr(windowSize*(j2-(j - floor(windowSize/2))+1) + (i2-(i - floor(windowSize/2)) + 1),i3,j3) = mat(i3,j3);
end
end
Можно записать как:
MArr(windowSize*(j2-(j-floor(windowSize/2))+1)+(i2-(i-floor(windowSize/2))+1),:,:)=mat;
После того, как вы найдете все места, где это можно сделать, научитесь использовать индексацию вместо циклических, например,
i2 = i - floor(windowSize/2): i + floor(windowSize/2);
i2=i2(i2>0 && i2<ysize+1);
j2 = j - floor(windowSize/2): j + floor(windowSize/2);
j2=j2(j2>0 && j2<xsize+1);
mat = weight*[mappedGX(i2,j2)^2, mappedGX(i2,j2)*mappedGY(i2,j2);
(Примечание для опытных пользователей: последняя строка может не работать, если mappedGX
является матрицей, а i2
/ j2
не представляет прямоугольную подматрицу. В таком случае вы будетенужно sub2ind()
)