This is a limitation of MATLAB, as MATLAB is only able to work with matrices. It does not have true vectors. It cannot even represent a character array as a 1D array or a structure array as a single element—it always must be 2D.
Mathematica takes a much more general view. It works with arbitrary, $n$-index tensors. A 1-index tensor is called a vector. A 2-index one is called a matrix.
What is commonly called a "row vector" or a "column vector" is not really a vector. It is a $1\times k$ or a $k \times 1 $ matrix.
The dot product of a vector $v$ and a matrix $a$ is
$$u_j = \sum_i v_i a_{ij}$$
The product of $a$ and $v$ is
$$u_i = \sum_j a_{ij} v_j$$
In general, one can contract any two indices together, although Dot
specifically only contracts the last one of the first tensor with the first one of the last tensor. TensorContract
can do more general operations.
One particular limitation of Mathematica compared to MATLAB is that Mathematica cannot represent arrays where one of the dimensions is 0, e.g. a 0-by-n matrix. This is not due to the difference in philosophy that I described above. It's because Mathematca uses nested lists, so we can have a 1-by-0 {}
but not a 0-by-1 thing.
n x 1
matrix and there's nothing stopping you from usingn x 1
matrices. But you don't have to if you don't want to. A normal list is just a rank 1 tensor. The documentation ofDot
, for example, states thatDot
contracts the innermost indices of two tensors. It doesn't matter what order of tensor you're using. $\endgroup$