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.

 Risposta accettata

Jan
Jan il 3 Mag 2012

1 voto

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;

Più risposte (3)

Andrei Bobrov
Andrei Bobrov il 3 Mag 2012

2 voti

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

1 Commento

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

Accedi per commentare.

Wayne King
Wayne King il 3 Mag 2012

0 voti

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 il 3 Mag 2012

0 voti

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

Categorie

Scopri di più su Loops and Conditional Statements in Centro assistenza e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by