Pregunta

Esto surgió en Funciones ocultas de Python, pero no puedo ver buena documentación o ejemplos que expliquen cómo funciona la función.

¿Fue útil?

Solución

Lo usarías en tu propia clase, ya que ninguna clase incorporada lo utiliza.

Numpy lo usa, como se indica en el 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, existe la documentación de Python, y referencia idiomática.Pero esos no son muy útiles.

Otros consejos

La elipsis se utiliza para dividir estructuras de datos de dimensiones superiores.

Está diseñado para significar en este punto, inserte tantas rebanadas completas (:) para extender el corte multidimensional a todas las dimensiones.

Ejemplo:

>>> from numpy import arange
>>> a = arange(16).reshape(2,2,2,2)

Ahora tienes una matriz de 4 dimensiones de orden 2x2x2x2.Para seleccionar todos los primeros elementos en la cuarta dimensión, puede utilizar la notación de puntos suspensivos.

>>> a[..., 0].flatten()
array([ 0,  2,  4,  6,  8, 10, 12, 14])

que es equivalente a

>>> a[:,:,:,0].flatten()
array([ 0,  2,  4,  6,  8, 10, 12, 14])

En sus propias implementaciones, puede ignorar el contrato mencionado anteriormente y utilizarlo para lo que considere conveniente.

Este es otro uso de los puntos suspensivos, que no tiene nada que ver con los cortes:A menudo lo uso en la comunicación dentro del subproceso con colas, como una marca que indica "Listo";está ahí, es un objeto, es un singleton y su nombre significa "falta de", y no es el Ninguno usado en exceso (que podría colocarse en una cola como parte del flujo de datos normal).YMMV.

Como se indica en otras respuestas, se puede utilizar para crear sectores.Útil cuando no desea escribir muchas notaciones de sectores completos (:), o cuando simplemente no está seguro de cuál es la dimensionalidad de la matriz que se está manipulando.

Lo que me pareció importante resaltar, y que faltaba en las otras respuestas, es que se puede utilizar incluso cuando no quedan más dimensiones por llenar.

Ejemplo:

>>> from numpy import arange
>>> a = arange(4).reshape(2,2)

Esto resultará en un error:

>>> a[:,0,:]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: too many indices for array

Esto funcionará:

a[...,0,:]
array([0, 1])
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top