[Numpy-discussion] Consider improving numpy.outer's behavior with zero-dimensional vectors

Nathaniel Smith njs at pobox.com
Thu Apr 9 01:44:28 EDT 2015

On Wed, Apr 8, 2015 at 7:34 PM, Neil Girdhar <mistersheik at gmail.com> wrote:
> Numpy's outer product works fine with vectors.  However, I seem to always
> want len(outer(a, b).shape) to be equal to len(a.shape) + len(b.shape).
> Wolfram-alpha seems to agree
> https://reference.wolfram.com/language/ref/Outer.html with respect to matrix
> outer products.

You're probably right that this is the correct definition of the outer
product in an n-dimensional world. But this seems to go beyond being
just a bug in handling 0-d arrays (which is the kind of corner case
we've fixed in the past); np.outer is documented to always ravel its
inputs to 1d.

In fact the implementation is literally just:

    a = asarray(a)
    b = asarray(b)
    return multiply(a.ravel()[:, newaxis], b.ravel()[newaxis,:], out)

Sebastian's np.multiply.outer is much more generic and effective.

Maybe we should just deprecate np.outer? I don't see what use it
serves. (When and whether it actually got removed after being
deprecated would depend on how much use it actually gets in real code,
which I certainly don't know while typing a quick email. But we could
start telling people not to use it any time.)


Nathaniel J. Smith -- http://vorpus.org

More information about the NumPy-Discussion mailing list