«

»

Oct
15

Matlab "not equal" function – be careful how you use it!

When using the Matlab “not equal” function (~= or ne) with vectors and matrices, one has to be careful. I found this out the hard way, playing with some m-code for a homework in my Introduction to Neural Networks course. The issue is that the ~= function evaluates matching pairs of vector/matrix elements one at a time and produces a vector/matrix output. For example, you can do this in the Matlab command window:

>> a = [1 1];
>> b = [1 2];
>> a~=b

ans =

0 1

What’s to be careful about? Well, I wanted to use ~= in an if statement. To do this, type the following in the Matlab command window:

>> if max(a~=b) > 0; c = 1; else c = 0; end
>> c

c =

1

What if you just evaluate a~=b? For the example above:

>> if a~=b; c = 1; else c = 0; end
>> c

c =

0

Not what you expected, right? It took me a while to catch this. Of course, I could have read Bruce Driver’s Matlab primer (scroll down to the end of Section 6). From his page I also learned that the following will work (note that each corresponding element of a and b is different):

>> a = [1 1];
>> b = [2 2];
>> if a~=b; c = 1; else c = 0; end
>> c

c =

1

Bruce also suggests using the “any” Matlab function in the above evaluation as well as just simplifying the whole thing by looking for vectors/matrices that are equal:

>> a = [1 1];
>> b = [1 2];
>> if a==b; c = 0; else c = 1; end
>> c

c =

1

So, be careful, the Matlab ~= function returns a vector/matrix when you compare vectors/matrices.

Andrew Kun

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>