On Sat, Mar 15, 2014 at 2:12 PM, Alexander Belopolsky <ndarray@mac.com> wrote:

On Sat, Mar 15, 2014 at 4:00 PM, Charles R Harris <charlesr.harris@gmail.com> wrote:
These days they are usually written as v*w.T, i.e., the outer product of two vectors and are a fairly common occurrence in matrix expressions. For instance, covariance matrices  are defined as E(v * v.T)

With the current numpy, we can do

>>> x = arange(1, 5)
>>> x[:,None].dot(x[None,:])
array([[ 1,  2,  3,  4],
       [ 2,  4,  6,  8],
       [ 3,  6,  9, 12],
       [ 4,  8, 12, 16]])

I assume once @ becomes available, we will have

>>> x[:,None] @ x[None,:]
array([[ 1,  2,  3,  4],
       [ 2,  4,  6,  8],
       [ 3,  6,  9, 12],
       [ 4,  8, 12, 16]])

Yes, that works. I was thinking more of easy translation of the forms found in textbooks. Householder reflection, for instance, is usually written as

I - 2 * v * v.T

Where the `v` are unit vectors.

Chuck