首页 > 解决方案 > 使用逐行求和进行循环优化

问题描述

针对以下嵌套循环的优化,问题是如何处理对逐行求和的需求。

for i=1:N
for j=1:N
    F(i,i)=(exp(-B(j,j))) * P(i,j)+ F(i,i);
end
end

具体来说,我想消除循环,根据这个解决方案看起来是可以实现的,但问题是如何F在每次迭代中存储变化的值。

我想出了这个主意:

for j=1:N
    F(:)=(exp(-B(j,j))) * P(:,j)+ F(:);
end

使用此解决方案,F 将在每次迭代中被覆盖!!任何的想法?

标签: matlabfor-loopoptimization

解决方案


我认为您的代码可以简化为如下代码

F = diag(P*exp(-diag(B)));

例子

N = 3;
B = rand(N,N);
P = rand(N,N);

F = zeros(N);
for i=1:N
for j=1:N
    F(i,i)=(exp(-B(j,j))) * P(i,j)+ F(i,i);
end
end

d = isequal(F,diag(P*exp(-diag(B)))); % check if F is identical to diag(P*exp(-diag(B)))

这样

>> d
d = 1 % indicating that they are identical

推荐阅读