如何避免在Matlab中嵌套for循环以获得更好的cpu时间

时间:2015-04-25 15:21:58

标签: matlab

我应该为p的大值计算这个公式,所以4个嵌套循环使我的代码非常慢并且不适用。如果有人能帮助我使用sum和其他合适的matlab命令更好地实现,我将非常感谢! 的 K(I,J)=总和(总和(A(M)* B(N)* A(I,J,M,N)中,m = 1:P)中,n = 1:P); i,j,m,n - > 1:p A是4D矩阵,a,b是向量。 感谢。

1 个答案:

答案 0 :(得分:0)

我可以摆脱2个for循环。也许这个网站上的一个MATLAB向导可以做得更好。

p = 3;

A = rand(p, p, p, p)
a = rand(p, 1)
b = rand(p, 1)

% I think your original code does something like this.
K1 = zeros(p, p);
for n = 1: p
    for m = 1: p
        for j = 1: p
            for i = 1: p
                K1(i, j) = K1(i, j) + a(m) * b(n) * A(i, j, m, n);
            end
        end
    end
end
K1

% This gives the same result, with half the loops.
K2 = zeros(p, p);
for n = 1: p
    for m = 1: p
        K2 = K2 + a(m) * b(n) * A(:,:,m,n);
    end
end
K2

% Verify that the two answers are the same.
all(K1(:) == K2(:))