【问题标题】:matlab code nested loop performance improvementmatlab代码嵌套循环性能提升
【发布时间】:2015-04-23 13:43:04
【问题描述】:

我很想收到有关如何提高以下嵌套 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

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

【问题讨论】:

    标签: performance matlab loops matrix nested


    【解决方案1】:

    你可以使用矩阵乘法:

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

    这将在对角线上有非零值,因此您可以将它们设置为零

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

    【讨论】:

    • 正要写这个! :)
    • @Divakar,被 bsxfun 分心了,是吗!
    【解决方案2】:

    bsxfun 的一种方法-

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-24
      • 1970-01-01
      • 2013-01-29
      • 1970-01-01
      • 1970-01-01
      • 2020-10-20
      • 2012-04-15
      相关资源
      最近更新 更多