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

Jan
Jan le 3 Mai 2012

1 vote

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;

Plus de réponses (3)

Andrei Bobrov
Andrei Bobrov le 3 Mai 2012

2 votes

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

1 commentaire

Jan
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!

Connectez-vous pour commenter.

Wayne King
Wayne King le 3 Mai 2012

0 votes

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 le 3 Mai 2012

0 votes

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

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!

Translated by