[Numpy-discussion] einsum and broadcasting

Jaakko Luttinen jaakko.luttinen at aalto.fi
Thu Apr 4 09:56:33 EDT 2013


I don't quite understand how einsum handles broadcasting. I get the
following error, but I don't understand why:

In [8]: import numpy as np
In [9]: A = np.arange(12).reshape((4,3))
In [10]: B = np.arange(6).reshape((3,2))
In [11]: np.einsum('ik,k...->i...', A, B)
---------------------------------------------------------------------------
ValueError: operand 0 did not have enough dimensions to match the
broadcasting, and couldn't be extended because einstein sum subscripts
were specified at both the start and end

However, if I use explicit indexing, it works:

In [12]: np.einsum('ik,kj->ij', A, B)
Out[12]:
array([[10, 13],
       [28, 40],
       [46, 67],
       [64, 94]])

It seems that it also works if I add '...' to the first operand:

In [12]: np.einsum('ik...,k...->i...', A, B)
Out[12]:
array([[10, 13],
       [28, 40],
       [46, 67],
       [64, 94]])

However, as far as I understand, the syntax
np.einsum('ik,k...->i...', A, B)
should work. Have I misunderstood something or is there a bug?

Thanks for your help!
Jaakko



More information about the NumPy-Discussion mailing list