NumPy array slice using None

17,513

Using None is equivalent to using numpy.newaxis, so yes, it's intentional. In fact, they're the same thing, but, of course, newaxis spells it out better.

The docs:

The newaxis object can be used in all slicing operations to create an axis of length one. newaxis is an alias for ‘None’, and ‘None’ can be used in place of this with the same result.

A related SO question.

Share:
17,513
carboleda
Author by

carboleda

Updated on June 01, 2022

Comments

  • carboleda
    carboleda almost 2 years

    This had me scratching my head for a while. I was unintentionally slicing an array with None and getting something other than an error (I expected an error). Instead, it returns an array with an extra dimension.

    >>> import numpy
    >>> a = numpy.arange(4).reshape(2,2)
    >>> a
    array([[0, 1],
           [2, 3]])
    >>> a[None]
    array([[[0, 1],
            [2, 3]]])
    

    Is this behavior intentional or a side-effect? If intentional, is there some rationale for it?

  • Guimoute
    Guimoute about 3 years
    It's intentional but is it logical? I would expect array[None] == array because I read it as "there is no mask applied". It would also feel more explicit to use something like array.add_axis() or array = np.add_axis(array) than array = array[None].