MATLAB: Array vs. Matrix Operations

arraycompatible sizesMATLABmatrixoperations

A row vector and a column vector have compatible sizes. If you add a 1-by-3 vector to a 2-by-1 vector, then each vector implicitly expands into a 2-by-3 matrix before MATLAB executes the element-wise addition.
x = [1 2 3]
x =
1 2 3
y = [10; 15]
y =
10
15
x + y
ans =
11 12 13
16 17 18
If the sizes of the two operands are incompatible, then you get an error.
A = [8 1 6; 3 5 7; 4 9 2]
A =
8 1 6
3 5 7
4 9 2
m = [2 4]
m =
2 4
A - m
Matrix dimensions must agree.
This is from the MATLAB "Array vs. Matrix Operations page". Why does the second example output an error while the first doesn't? I see that the second example says that "matrix dimensions must agree", but why did that error not occur for the first example? A further explanation of this would be great. Thank you!

Best Answer

What "compatible sizes" means is explained on this page:
I will not copy the entire page here, but the main points are:
  • scalar dimensions can be expanded/contracted to match the other array.
  • non-scalar dimensions must have exactly the same size.
That is all. So your first example works because (note the scalar dimensions):
  • 1x3 can be expanded to 2x3
  • 2x1 can be expanded to 2x3
But your second example fails because
  • 1x2 can be expanded to 3x2
  • 1x2 cannot be expanded/contracted to match 3x3,nor can 3x3 be expanded/contracted to match 1x2, because in the second dimension neither is scalar, nor do they have the same size.