使用向量化替换两个for循环?



我有一个函数f(x,y) = abs(cos(x+3) * sin(y+2)),我需要使用两个for循环求和。注:实际的功能更复杂,这是一个玩具版的问题。

f = @(x,y) abs(cos(x+3) * sin(y+2));
tot = 0;
for m=1:100
for n=1:100
tot = tot + f(m,n);
end
end
disp(tot)
Output: 4.026314876227891e+03

我如何向量化这段代码,以摆脱for循环,使其更快?

[n,m]=meshgrid(1:100,1:100);
tot=sum(f(m,n),'all')

然而,我不确定这是否更快,你可以计时。Matlab在循环中相当快,旧的真理是当你循环时它会变慢,过时了5年左右。大多数情况下,JIT编译器会找到最快的方式来运行它。这是您的玩具问题可能隐藏实际问题的情况之一,因为JIT可能会发现这个玩具问题更容易加速,而不是您的实际问题,反之亦然。

你需要时间。

相关内容

  • 没有找到相关文章

最新更新