有没有办法对 matlab 代码进行矢量化或其他方法来减少其运行时间?



有没有办法改进下面的代码?在更高的值下需要很多时间。如果建议改进的解决方案,我将不胜感激。

term3=0;
ngrain=70;
etas = rand(512*512,70);
glist = round(1,70);
en = zeros(1,70);
for i=1:70
en(i)=0.493;
end
for igrain=1:ngrain
for jgr=1:ngrain+nrex
if(glist(jgr)== 1)
den(igrain,jgr)=en(jgr)-en(igrain);
term3=term3-8/pi*(etas(:,igrain).*etas(:,jgr)).^0.5*den(igrain,jgr);
end
end
end

请以后更精确。以下是一些改进编码的提示:

用常量构建向量可以通过多种方式实现(不幸的是,你选择了效率最低的一种(:

  • 一个 for 循环(有或没有预先分配内存,你确实分配了,所以这很好!
  • 使用1* 常量 =>ones(1,70)*0.493
  • 重复 1x1 矩阵:repmat(( =>repmat(1,70,0.493)(这是最有效的方法,您可以使用tic()toc()进行检查(

无论如何,这不是你的瓶颈。 您可以直接进行逻辑比较,而不是循环并使用 if:

lg = glist == 1;
idx = find(lg);
for i = 1:length(idx)
jgr = idx(i)
end

请注意,您的示例不起作用,因为未定义nrex。如果您将代码格式化得更好(一致的间距、缩进、更直观的命名(,那也很棒(

相关内容

最新更新