One of the recent Mathetmatica 3.0 books (sorry, don't have it at hand,
so can't credit it properly), points out that if you define row vectors
in the form
rowVector={{a1,a2,a3}};
rowVector//MatrixForm
and column vectors in the form
columnVector={{b1},{b2},{b3}};
columnVector//MatrixForm
(note the extra curly brackets in both cases), then both the dot
product, namely,
dotProduct = rowVector . columnVector;
dotProduct//MatrixForm
and the outer product, e.g.,
outerProduct = columnVector . rowVector;
outerProduct//MatrixForm
will work exactly as you expect them to. Can't say how far this can be
extended into more complex tensor situations, however -- or how much
trouble you'll run into getting rid of the extra brackets in subsequent
calculations.