RockPaperScissors

LizardSpock

Testing Matlab Arrays for Equality.

| Comments

Testing a matlab array for equality can be doen a few different was some have surprising side effects if your not use to working with vectorised testing.

Initial test :

a = [1,2,3];
if (a == [1,2,3])
  disp('equal')
end

> equal

Seems easy, But what happens if the dimensions of the array are incorrect?

a = [1,2,3];
if (a == [1,2,3,4])
  disp('equal')
end

Error using  == 
Matrix dimensions must agree

May be if we check dimensions first using short-circuiting (&&) operators. NB: Short circuiting operators only execute if required, if it failed on the left hand side the right side will not be evaluated.

a = [1,2,3];
if ((length(a) == 4) && (a == [1,2,3,4]))
  disp('equal')
end

So far so good, but lets check it will also pass:

a = [1,2,3];
if ((length(a) == 3) && (a == [1,2,3]))
  disp('equal')
end

Operands to the || and && operators must be convertible to logical scalar
values.

This is where it got interesting for me:

a ==[1,2,3]
ans =

 1     1     1

The basic equality == test for arrays is vectorised. When this is the only test it gets reduced down to true or false, but can not be combined with scalars.

Then I the discovered the isequal function.

a = [1,2,3];
isequal(a, [1,2,3])

ans =

     1

a = [1,2,3];
isequal(a, [1,2,3,4])

ans =

     0

For direct comparisons of arrays use isequal(a,b) for vectorised operations use a==b.

Comments