MATLAB 代码嵌套循环性能改进



我非常有兴趣收到有关如何提高以下嵌套 for 循环性能的建议:

I = (U > q); % matrix of indicator variables, I(i,j) is 1 if U(i,j) > q
for i = 2:K
    for j = 1:(i-1)
        mTau(i,j) = sum(I(:,i) .* I(:,j));
        mTau(j,i) = mTau(i,j);
    end
end

该代码评估变量对的两个变量是否低于某个阈值,从而填充矩阵。感谢您的帮助!

您可以使用矩阵乘法:

I = double(U>q);
mTau = I.'*I;

这将在对角线上具有非零值,因此您可以通过以下方式将它们设置为零

mTau = mTau - diag(diag(mTau));

一种bsxfun的方法 -

out = squeeze(sum(bsxfun(@and,I,permute(I,[1 3 2])),1));
out(1:size(out,1)+1:end)=0;

最新更新