matlab - 使用逐行求和进行循环优化
问题描述
针对以下嵌套循环的优化,问题是如何处理对逐行求和的需求。
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 将在每次迭代中被覆盖!!任何的想法?
解决方案
我认为您的代码可以简化为如下代码
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