如何解决嵌套 for 循环在所有情况下都太慢了吗?
我正在 Matlab 中编写本科课程的数字方法,我发现使用大量嵌套 for 循环的代码太慢,而不是使用大量浮点运算(加、乘等)的代码。有谁知道是否存在关于这个事实的论文或研究(嵌套循环很慢)。我不明白,在大多数情况下,这取决于代码的优化程度,但通常是真的吗?。在 Google 中,我找不到任何关于此事实的论文。
我在 matlab 中有这段代码
function [L,operaciones]=CholeskyInc(A)
tic
[n,m]=size(A);
operaciones = 0;
if n~= m; error('A no es cuadrada');
else
L=speye(n,n);
for k=1:n
L(k,k)=sqrt(A(k,k));
for i=k+1:n
if A(i,k)~=0
L(i,k)=A(i,k)/A(k,k);
end
end
for j=k+1:n
for i=j:n
if (A(i,j))~=0
L(i,j)=A(i,j)-A(i,k)*A(j,k);
end
end
end
end
L = tril(A);
toc
end
对于大型矩阵(例如 625x625),此代码计算矩阵需要 2 分钟以上,但它似乎是一个简单的代码
解决方法
有谁知道是否有关于这个事实的论文或研究(嵌套循环很慢)。
没有嵌套循环太慢的一般原则。
您可能已经看到一些建议,即按列访问数组(当它们以行优先顺序存储时)很慢。这是由于硬件设计可以快速访问相邻元素(因为它们是成组从内存中获取并保存在高速缓存中),而访问多个相距很远的元素很慢。我提出这个问题与你的问题模糊匹配。还有许多其他有关算法和硬件的问题会导致效率低下或效率低下。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。