Numpy: arr funciona. Pero, ¿cómo almaceno los datos contenidos en el comando slice (…, 0, :)?

En Numpy (y Python en general, supongo), ¿cómo se almacena un índice de sector, como (…, 0, :), para pasarlo y aplicarlo a varios arreglos? Sería bueno, digamos, poder pasar un índice de división hacia y desde las funciones.

Python crea objetos especiales a partir de la syntax de división, pero solo dentro de los corchetes para la indexación. Puede crear esos objetos a mano (en este caso, (...,0,:) es (Ellipsis, 0, slice(None, None, None)) , o puede crear un pequeño objeto auxiliar:

 class ExtendedSliceMaker(object): def __getitem__(self, idx): return idx >>> ExtendedSliceMaker()[...,0,:] (Ellipsis, 0, slice(None, None, None)) 

Use s_ en NumPy:

 In [1]: np.s_[...,0,:] Out[1]: (Ellipsis, 0, slice(None, None, None)) 

El equivalente a (...,0,:) debería ser …

 >>> myslice = (..., 0, slice(None, None)) >>> myslice (Ellipsis, 0, slice(None, None, None)) 

Lo bueno de Python es que realmente puedes hacer una clase para inspeccionar cómo están representadas estas cosas. Python usa el método mágico __getitem__ para manejar las operaciones de indexación, así que crearemos una clase que sobrecargue esto para mostrarnos lo que se pasó, instanciar la clase e “indexar” a la instancia:

 class foo: def __getitem__(self, index): print index foo()[...,0,:] 

Y nuestro resultado es:

 (Ellipsis, 0, slice(None, None, None)) 

Ellipsis y el slice están incorporados, y podemos leer su documentación:

 help(Ellipsis) help(slice) 

Creo que solo quieres hacer myslice = slice (1,2) para, por ejemplo, definir una división que devolverá el segundo elemento (es decir, myarray [myslice] == myarray [1: 2])