avoiding for loop
Afficher commentaires plus anciens
Hi..
I really want to avoid for loop in my program because it takes longer time if the array is too big.
For example i have two arrays. Let say A and B
A=[1 2 3 4 5];
B=[4 5 6 2 1];
and the outcome array C should be like this C=[5 7 9 -2 -4]
what i did was:
for i=1:length(B)
if (B(i)>A(i))
C(i)=B(i)+A(i);
else
C(i)=B(i)-A(i);
end
end
p/s: actually my function is a bit different but the principle is same.
Réponse acceptée
Plus de réponses (3)
Andrei Bobrov
le 3 Mai 2012
out = B + sign(B - A).*A;
EDITED on Jan's comment
out = (B~=A).*B + sign(B - A).*A;
1 commentaire
Jan
le 3 Mai 2012
+1. A general suggestion for sign() compared to "if A>B, else, end": Check if the A==B case is correct!
Wayne King
le 3 Mai 2012
A=[1 2 3 4 5]';
B=[4 5 6 2 1]';
C = [A B];
D = C(:,2)-C(:,1);
out = [sum(C(D>0,:),2); diff(C(D<=0,:),[],2)]
Muhammad Affandi
le 3 Mai 2012
0 votes
Catégories
En savoir plus sur Loops and Conditional Statements dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!