我非常有兴趣收到有关如何提高以下嵌套 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;