avoiding for loop

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.

 Accepted Answer

Jan
Jan on 3 May 2012
And another solution:
A = [1 2 3 4 5]';
B = [4 5 6 2 1]';
index = B > A;
C(index) = B(index) + A(index);
nindex = ~index;
C(nindex) = B(nindex) - A(nindex);
And another one:
f = 2 * (B > A) - 1;
C = B + f .* A;

More Answers (3)

out = B + sign(B - A).*A;
EDITED on Jan's comment
out = (B~=A).*B + sign(B - A).*A;

1 Comment

Jan
Jan on 3 May 2012
+1. A general suggestion for sign() compared to "if A>B, else, end": Check if the A==B case is correct!

Sign in to comment.

Wayne King
Wayne King on 3 May 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
Muhammad Affandi on 3 May 2012

0 votes

thanks..thats great.. now i have so many alternatives..

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!