如何通过 matlab 矢量化简化我的双循环?

问题描述 投票:0回答:1

我的代码是:

N = 500;  % 
D_1=ones(N,N);%
D_2=ones(N,N);% For simplicity.
B=zeros(N,N);
for i = 1:N
    for j = i+1:N
        basis_vector = zeros(N, 1);
        basis_vector(i) = 1;
        basis_vector(j) = -1;
        if D_2(i,j)>0
            w = D_1(i,j) / D_2(i,j);
        else
            w = 0;
        end
        B = B + w .* basis_vector * basis_vector';
    end
end

如何简化我的代码?

因为N太大,我的代码需要花费很多时间才能完成。

matlab for-loop time-complexity vectorization simplify
1个回答
0
投票

这是矢量化版本:

w = D_1 ./ D_2;
w(D_2 <= 0) = 0;
m = triu(w, 1);
d = sum(m, 1).' + sum(m, 2);
B = -(m.' + m);
B(1:N+1:N*N) = d;
© www.soinside.com 2019 - 2024. All rights reserved.