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)
您可以使用以下内容替换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.