Note also that the plus documentation includes links to that second page (the links are within the descriptions of both of the input arguments). This is why it is strongly recommended to read the documentation for all operators that you use, no matter how trivial you may think that operator is: reading the documentation significantly reduces surprises.
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.
Best Answer