Esto surgió en las características ocultas de Python , pero no puedo ver una buena documentación o ejemplos que expliquen cómo funciona la característica.
157
Ellipsis
o ...
no es una característica oculta, es solo una constante. Es bastante diferente a, digamos, javascript ES6, donde forma parte de la sintaxis del lenguaje. Ninguna clase incorporada o construcción de lenguaje Python hace uso de ella.
Entonces, la sintaxis para ello depende completamente de que usted o alguien más tenga un código escrito para comprenderlo.
Numpy lo usa, como se indica en la documentación . Algunos ejemplos aquí .
En tu propia clase, lo usarías así:
>>> class TestEllipsis(object):
... def __getitem__(self, item):
... if item is Ellipsis:
... return "Returning all items"
... else:
... return "return %r items" % item
...
>>> x = TestEllipsis()
>>> print x[2]
return 2 items
>>> print x[...]
Returning all items
Por supuesto, está la documentación de Python y la referencia del lenguaje . Pero esos no son muy útiles.
La elipsis se utiliza en numpy para cortar estructuras de datos de dimensiones superiores.
Está diseñado para significar en este punto, inserte tantos cortes completos (
:
) para extender el corte multidimensional a todas las dimensiones .Ejemplo :
Ahora, tiene una matriz de 4 dimensiones de orden 2x2x2x2. Para seleccionar todos los primeros elementos en la cuarta dimensión, puede usar la notación de puntos suspensivos
que es equivalente a
En sus propias implementaciones, puede ignorar el contrato mencionado anteriormente y utilizarlo para lo que considere conveniente.
fuente
a[:,:,:,0]
devolverá una copia ya[...,0]
devolverá la "vista" y no la copia? Intenté ejecutarid()
contra ambas versiones y para una matriz de 3 dim:a[:,:,:, 0], a[:,:,:, 1], a[:,:,:, 2]
todos tienen diferentes identificadores, mientras que:a[..., 0], a[..., 1], a[..., 2]
todos tienen los mismos identificadores.id()
devuelve el mismo valor para ambos. Verificando también__array_interface__['data']
muestra la misma dirección de memoria.a[indexes, ...]
mientras que a es una matriz de 1 dimensión incluso!Este es otro uso para Ellipsis, que no tiene nada que ver con cortes: a menudo lo uso en comunicación intra-hilo con colas, como una marca que indica "Hecho"; está allí, es un objeto, es un singleton, y su nombre significa "falta de", y no es el None usado en exceso (que podría ponerse en una cola como parte del flujo de datos normal). YMMV.
fuente
Como se indicó en otras respuestas, se puede usar para crear sectores. Útil cuando no desea escribir muchas anotaciones de cortes completos (
:
), o cuando no está seguro de cuál es la dimensionalidad de la matriz que se está manipulando.Lo que me pareció importante destacar, y que faltaba en las otras respuestas, es que se puede usar incluso cuando no hay más dimensiones que llenar.
Ejemplo:
Esto dará como resultado un error:
Esto funcionará:
fuente