【问题标题】:Loop optimization with row-wise sum使用逐行求和进行循环优化
【发布时间】:2020-06-14 02:18:21
【问题描述】:

为了优化后续的嵌套循环,问题是如何处理对逐行求和的需求。

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

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

我想出了这个主意:

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

使用此解决方案,F 将在每次迭代中被覆盖!!有什么想法吗?

【问题讨论】:

  • FBP的尺寸是多少? N 的值是多少?
  • @SardarUsama,所有矩阵都是NxNN=300
  • 你真的是指F(i,i)=...吗?那永远不会为F 的非对角元素分配任何值?那么为什么不将F 设为向量呢?而且您只使用过B 的对角线元素,对吗?

标签: matlab for-loop optimization


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-15
    • 2021-05-05
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-26
    相关资源
    最近更新 更多