matlab - 嵌套 for 循环在所有情况下都太慢?
问题描述
我在 Matlab 中编写本科课程的数字方法,我发现使用大量嵌套循环的代码太慢了,而不是使用大量浮点运算(加法、乘法等)的代码。有谁知道是否存在关于这个事实的论文或研究(嵌套循环很慢)。我不明白,在大多数情况下,这取决于代码的优化程度,但一般来说是真的吗?在谷歌,我找不到任何关于这个事实的论文。
我在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 分钟以上来计算矩阵,但它似乎是一个简单的代码
解决方案
有谁知道是否存在关于这个事实的论文或研究(嵌套循环很慢)。
嵌套循环太慢没有一般原则。
您可能已经看到一些建议,即按列访问数组(当它们以行优先顺序存储时)很慢。这是由于硬件设计可以快速访问相邻元素(因为它们是从内存中分组获取并保存在高速缓存中),而访问多个相隔很远的元素却很慢。我将此作为与您的问题的模糊匹配提出来。还有许多其他关于算法和硬件的问题会导致效率低下或效率低下。
推荐阅读
- javascript - 反应角材料数据表
- git - 如何获得`git diff origin/master`的相反方向
- javascript - 标签中的自动转发 Gmail 不会转发完整的对话
- c# - 单击图钉/标记时在地图上添加按钮(xamarin 形式)
- powershell - 如果使用电源脚本存在,如何复制和覆盖其中的现有文件夹和文件
- android - 发生IDE致命错误字符串索引超出范围android studio
- c++ - 最大元素的打印索引
- javascript - 如何使用 ajax 帖子和数据表附加数据不起作用?
- r - 双for循环的高效实现
- angular - 为什么角生产构建中的 polyfills 的行为与开发模式中的不同?