【发布时间】:2021-03-24 05:53:00
【问题描述】:
我需要摆脱我的 Matlab 代码中的循环。在此过程中,我遇到了以下问题。这是部分代码
Nx=11; Ny=11;
A=rand(Ny,Nx);
A1=A;
for j=2:Ny-1
for i=2:Nx-1
A(j,i)=A(j,i-1);
end;
end;
A1(2:Ny-1,2:Nx-1)=A1(2:Ny-1,1:Nx-2);
A2=A-A1;
我知道A 不等于A1。右侧的j-1 索引情况与此相同。但是,如果我们采用索引i + 1 或j + 1,那么一切正常。
【问题讨论】:
-
“我需要去除我的 Matlab 代码中的循环。”为什么?这是“循环很慢的常识”吗?或者您是否通过分析器确定此特定循环是您代码中的瓶颈? MATLAB 中的循环已经很多年没有变慢了。当然,向量化代码有时仍然更快,但收益微乎其微。您需要先分析您的代码,然后再决定将时间和精力投入到哪些代码上以加快速度。
-
我需要执行此过程,因为我使用并行 GPU 计算。 CPU 代码在速度适中的网格大小的情况下与循环配合得很好。相反,代码应该为 GPU 计算向量化以获得令人印象深刻的加速。
标签: matlab loops for-loop matrix linear-algebra