On Wed, Jan 26, 2011 at 6:41 PM, Jonathan Rocher <jrocher@enthought.com> wrote:
Nice function, and wonderful that it speeds some tasks up.

some feedback: the following notation is a little counter intuitive to me:
    >>> np.einsum('i...->', a)
    array([50, 55, 60, 65, 70])
    >>> np.sum(a, axis=0)
    array([50, 55, 60, 65, 70])
Since there is nothing after the ->, I expected a scalar not a vector. I might suggest 'i...->...'

Hmm, the dimension that's left is a a broadcast dimension, and the dimension labeled 'i' did go away.  I suppose disallowing the empty output string and forcing a '...' is reasonable.  Would disallowing broadcasting by default be a good approach?  Then,
einsum('ii->i', a) would only except two dimensional inputs, and you would have to specify einsum('...ii->...i', a) to get the current default behavior for it.

Just noticed also a typo in the doc:

     order : 'C', 'F', 'A', or 'K'
        Controls the memory layout of the output. 'C' means it should
        be Fortran contiguous. 'F' means it should be Fortran contiguous,
should be changed to
    order : 'C', 'F', 'A', or 'K'
        Controls the memory layout of the output. 'C' means it should
        be C contiguous. 'F' means it should be Fortran contiguous,


Thanks,
Mark