我在两个循环中有一个if
语句,它运行得太慢,我认为它可以进行优化。 NF_zeta
是一个2D逻辑数组。
for k = 2:Nx
for l = 2:Ny
if NF_zeta(l,k)
z2(l,k) = z1(l,k) - optVar2*(U2(l,k) - U2(l,k-1) + V2(l,k) - V2(l-1,k));
end
end
end
以下是分析器的结果 http://i.imgur.com/oMropeL.png
我尝试使用单循环来处理条件语句。我写了一些类似于一个循环for [1 4 5]
的内容,
for idx = NF_zeta_v
z2(idx(1),idx(2)) = z1(idx(1),idx(2)) - optVar2*(U2(idx(1),idx(2)) - U2(idx(1),idx(2)-1) + V2(idx(1),idx(2)) - V2(idx(1)-1,idx(2)));
end
这里预先创建NF_zeta_v
c_z = 1;
for l = 1:Ny
for k = 1:Nx
if NF_zeta(l,k)
NF_zeta_v(:,c_z) = [l;k];
c_z = c_z + 1;
end
end
end
花了差不多两倍的时间。分析器http://i.imgur.com/OegeEOC.png
的结果我还能尝试什么,有什么建议吗?
答案 0 :(得分:1)
这是使用diff
-
diffs = diff(U2(2:end,:),[],2) + diff(V2(:,2:end),[],1);
allvals = z1(2:end,2:end) - optVar2*diffs;
z2(2:Ny,2:Nx) = NF_zeta(2:Ny,2:Nx).*allvals;