Testing Matlab Arrays for Equality.
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
.
Matlab
]