Matlab嵌套循环到矢量化

Wil*_*haw 1 matlab for-loop nested vectorization

如果我有一个for带有嵌套for循环的循环,使用一个循环将值输入到方形矩阵中for,循环通过我的Y轴,另一个循环通过我的X轴

我怎样才能将其改为矢量化以提高效率

g=zeros(f);

%y loop
for u = 1:f
    %x loop
    for v = 1:f
        g(u,v) = exp(-(((u-u0)^2)+((v-u0)^2))/(2*(sigma^2)))  
    end
end
Run Code Online (Sandbox Code Playgroud)

MrA*_*man 5

您可以使用以下内容替换for循环:

u = ((1:f) - u0).^2;
v = ((1:f) - v0).^2;
g = exp(-bsxfun(@plus,u',v)/(2*sigma^2));
Run Code Online (Sandbox Code Playgroud)

编辑:

在MATLAB(R2016b和更新版本)的更新版本中bsxfun,由于MATLAB的新隐式扩展,您可以在不使用MATLAB的情况下进行计算:

u = ((1:f) - u0).^2;
v = ((1:f) - v0).^2;
g = exp((u'+v)/(2*sigma^2));
Run Code Online (Sandbox Code Playgroud)

理论上,这应该同样快,如果不是更快bsxfun.