patternpythonCritical
What does the Ellipsis object do?
Viewed 0 times
objecttheellipsisdoeswhat
Problem
While idly surfing the namespace I noticed an odd looking object called
After a search I found that it is used in some obscure variant of the slicing syntax by Numpy and Scipy... but almost nothing else.
Was this object added to the language specifically to support Numpy + Scipy? Does Ellipsis have any generic meaning or use at all?
Ellipsis, it does not seem to be or do anything special, but it's a globally available builtin. After a search I found that it is used in some obscure variant of the slicing syntax by Numpy and Scipy... but almost nothing else.
Was this object added to the language specifically to support Numpy + Scipy? Does Ellipsis have any generic meaning or use at all?
D:\workspace\numpy>python
Python 2.4.4 (#71, Oct 18 2006, 08:34:43) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> Ellipsis
EllipsisSolution
This came up in another question recently. I'll elaborate on my answer from there:
Ellipsis is an object that can appear in slice notation. For example:
Its interpretation is purely up to whatever implements the
Extending this further, Ellipsis is used here to indicate a placeholder for the rest of the array dimensions not specified. Think of it as indicating the full slice
Interestingly, in python3, the Ellipsis literal (
EDIT: Ellipsis is also used in the standard library
Ellipsis is an object that can appear in slice notation. For example:
myList[1:2, ..., 0]Its interpretation is purely up to whatever implements the
__getitem__ function and sees Ellipsis objects there, but its main (and intended) use is in the numpy third-party library, which adds a multidimensional array type. Since there are more than one dimensions, slicing becomes more complex than just a start and stop index; it is useful to be able to slice in multiple dimensions as well. E.g., given a 4 × 4 array, the top left area would be defined by the slice [:2, :2]:>>> a
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12],
[13, 14, 15, 16]])
>>> a[:2, :2] # top left
array([[1, 2],
[5, 6]])Extending this further, Ellipsis is used here to indicate a placeholder for the rest of the array dimensions not specified. Think of it as indicating the full slice
[:] for all the dimensions in the gap it is placed, so for a 3d array, a[..., 0] is the same as a[:, :, 0] and for 4d a[:, :, :, 0], similarly, a[0, ..., 0] is a[0, :, :, 0] (with however many colons in the middle make up the full number of dimensions in the array).Interestingly, in python3, the Ellipsis literal (
...) is usable outside the slice syntax, so you can actually write:>>> ...
EllipsisEDIT: Ellipsis is also used in the standard library
typing module: e.g. Callable[..., int] to indicate a callable that returns an int without specifying the signature, or Tuple[str, ...] to indicate a variable-length homogeneous tuple of strings.Code Snippets
myList[1:2, ..., 0]>>> a
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12],
[13, 14, 15, 16]])
>>> a[:2, :2] # top left
array([[1, 2],
[5, 6]])>>> ...
EllipsisContext
Stack Overflow Q#772124, score: 877
Revisions (0)
No revisions yet.