Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

matlab. vectorization within if/else if/else statements

I need some help with the following code:

if x(:,3)>x(:,4)
output=[x(:,1)-x(:,2)];
elseif x(:,3)<x(:,4)
output=[x(:,2)-x(:,1)];
else
output=NaN
end

Here is a sample data:

matrix x              output
10   5   1   2        -5
10   5   2   1         5     
NaN  1   1   3         NaN

I'm not sure how to make the code work. It just takes the first argument and ignores the else if and else arguments. Please help. Thank you.

like image 937
Buntalan Avatar asked Sep 11 '13 12:09

Buntalan


1 Answers

if x(:,3)>x(:,4) doesn't really work, if expects either true or false not a vector. So it only evaluates the first element of the vector x(:,3)>x(:,4) which is why it appears to ignore your elseif.

So you must either use a loop or even better you can use logical indexing like this:

x= [10   5   1   2        
10   5   2   1        
NaN  1   1   3]

output = NaN(size(x,1),1)
I = x(:,3)>x(:,4);
output(I) = x(I,1)-x(I,2);
I = x(:,3)<x(:,4);
output(I) = x(I,2)-x(I,1)
like image 140
Dan Avatar answered Nov 05 '22 14:11

Dan