Python: Ellipsis (…) / Numpy: axis=-1 / np.newaxis
Ellipsis
Ellipsis
is a python constant, just like False
, True
and None
.
...
is the ellipsis literal; it’s equivalent to Ellipsis
.
In [9]: Ellipsis
Out[9]: Ellipsis
In [10]: ...
Out[10]: Ellipsis
When used for slicing, ...
usually (depending on the __getitem__
implementation) means “all the other dimensions (between the specified sentinels)” (:
means “all the elements in that dimension”).
It’s useful when you are handling variant-dimension arrays/matrices. Say you need a function to return “the last element(s) of each dimension”. (See Stack Overflow: “Slicing” in Python Expressions documentation)
- If it’s a 1-D, you need
array[-1]
- If it’s a 2-D, you need
array[:, -1]
- If it’s a 3-D, you need
array[:, :, -1]
- ……
- No matter how many dimensions, you can always have
array[..., -1]
axis=-1
Just like list[-1]
indicates the last elements, axis=-1
means “the last dimension” (See Stack Overflow: What is the meaning of axis=-1 in keras.argmax?):
- It’s the 2nd dimension of a 2-D array
- It’s the 3rd dimension of a 3-D array
- …
np.newaxis
Used to increase the dimension of the current array, directly from the slicing processes.
A great illustration of how it works is from Stack Overflow: How does numpy.newaxis work and when to use it?:
Tensorflow has a similar tf.newaxis
; it works the same way:
In [2]: t = tf.constant([[1., 2., 3.], [4., 5., 6.]])
In [6]: t[:, 1].shape
Out[6]: TensorShape([2])
In [7]: t[:, 1, tf.newaxis].shape
Out[7]: TensorShape([2, 1])
In [8]: t[tf.newaxis, :, 1].shape
Out[8]: TensorShape([1, 2])
t[:, 1]
is the vector[2, 5]
t[:, 1, tf.newaxis]
makes a $2 \times 1$ matrix: 2 rows, each being a one-element vectort[tf.newaxis, :, 1]
makes a $1 \times 2$ matrix: 1 row, containing a two-element vector
Comments