Performance 更高效的Matlab代码请

Performance 更高效的Matlab代码请,performance,matlab,Performance,Matlab,我对matlab是新手,所以我不知道matlab使代码更高效、更快的所有捷径。我一直在为一个家庭作业在matlab中拼凑一些东西,同时专注于完成作业而不是效率。现在我发现我花在等待程序上的时间比实际编写程序的时间要多。下面是一个令人头痛的嵌套for循环,它需要花费很长时间才能完成。有没有一种更快或更有效的方法,可以在没有这么多forloop的情况下对其进行编码 for i = 1:ysize for j = 1:xsize MArr = zeros(windowSize^2, 2, 2)

我对matlab是新手,所以我不知道matlab使代码更高效、更快的所有捷径。我一直在为一个家庭作业在matlab中拼凑一些东西,同时专注于完成作业而不是效率。现在我发现我花在等待程序上的时间比实际编写程序的时间要多。下面是一个令人头痛的嵌套for循环,它需要花费很长时间才能完成。有没有一种更快或更有效的方法,可以在没有这么多forloop的情况下对其进行编码

for i = 1:ysize
for j = 1:xsize
    MArr = zeros(windowSize^2, 2, 2);
    for i2 = i - floor(windowSize/2): i + floor(windowSize/2)
        if i2 > 0 && i2 < ysize + 1
            for j2 = j - floor(windowSize/2): j + floor(windowSize/2)
                if j2 > 0 && j2 < xsize + 1
                    mat =  weight*[mappedGX(i2,j2)^2, mappedGX(i2,j2)*mappedGY(i2,j2); mappedGX(i2,j2)*mappedGY(i2,j2), mappedGY(i2,j2)^2];
                    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
                end
            end
        end
    end
    Msum = zeros(2,2);
    for k = size(MArr)
        for i2 = 1:2
            for j2 = 1:2
                Msum = Msum + MArr(k,i2,j2);
            end
        end
    end
    R(i,j) = det(Msum) - alpha*(trace(Msum)^2);
    R = -1 * R;
end
end
对于i=1:ysize
对于j=1:xsize
MArr=零(窗口大小^2,2,2);
对于i2=i-楼层(WindowsSize/2):i+楼层(WindowsSize/2)
如果i2>0&&i20&&j2
使用冒号代替循环。例如:

                    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); 
i2=i-floor(windowSize/2):i+floor(windowSize/2);

i2=i2(i2>0&&i20&&j2请告诉我们它所做的事情的要点,这样我们就可以理解您的代码所做的事情。看到名为“i,i2,i3”的变量从来不是一个好兆头。。。。