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