Rodaja de numpy de dimensiones arbitrarias

Me gustaría dividir una matriz numpy para obtener el índice i-th en la última dimensión. Para una matriz 3D, esto sería:

slice = myarray[:,:,i] 

Pero estoy escribiendo una función donde puedo tomar una serie de dimensiones arbitrarias, por lo que para una matriz 4D necesitaría myarray[:,:,:,i] , y así sucesivamente. ¿Hay alguna manera de obtener esta porción para cualquier matriz sin tener que escribir explícitamente las dimensiones de la matriz?

Hay ... o Ellipsis , que hace exactamente esto:

 slice = myarray[..., i] 

Elipsis es el objeto de python, si desea utilizarlo fuera de la notación de corchete.

En realidad, acabo de encontrar la respuesta. Como se indica en la documentación de numpy, esto se puede hacer con el objeto de sector. En mi caso particular, esto lo haría:

 idx = [slice(None)] * (myarray.ndim - 1) + [i] my_slice = myarray[idx] 

La slice(None) es equivalente a elegir todos los elementos en ese índice, y la última [i] selecciona un índice específico para la última dimensión.

En términos de cortar una dimensión arbitraria, las excelentes respuestas anteriores se pueden extender a:

 indx = [Ellipsis]*myarray.ndim indx[slice_dim] = i slice = myarray[indx] 

Esto devuelve la porción de cualquier dimensión slice_dimslice_dim = -1 reproduce las respuestas anteriores. Para completar, las dos primeras líneas del listado anterior se pueden condensar a:

 indx = [Ellipsis]*(slice_dim) + [i] + [Ellipsis]*(myarray.ndim-slice_dim-1) 

aunque encuentro la versión anterior más legible.