Optimization of a nested loop

5 Ansichten (letzte 30 Tage)
Italo
Italo am 22 Jun. 2012
Hello guys I wrote the following code, but it takes ages to complete. Could you please help me optimizing it? A and B are matrixes
for i=1:length(A)
for j=1:length(B)
CCI = CCI + heaviside(norm(A(i,:)-B(j,:)));
end
end
Thanks

Antworten (2)

Sean de Wolski
Sean de Wolski am 22 Jun. 2012
Not necessarily faster, prettier, less confusing or better in any way with the exception of being on one line and containing the awesomeness that is bsxfun:
CCI2 = sum(sum(heaviside(sqrt(sum(bsxfun(@minus,A,reshape(B',1,size(B,2),size(B,1))).^2,2)))))

Andrei Bobrov
Andrei Bobrov am 22 Jun. 2012
other variant
CCI = (nnz(any(bsxfun(@minus,A,reshape(B',1,size(B,2),[])),2)) + size(A,1)*size(B,1))/2;

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by