Índice múltiple, rangos no adyacentes en numpy

Me gustaría seleccionar múltiples rangos no adyacentes de una matriz de 1d (o vector).

Suponer:

>>> idx = np.random.randint(100, size=10) array([82, 9, 11, 94, 31, 87, 43, 77, 49, 50]) 

Esto funciona, por supuesto:

 >>> idx[0:3] array([82, 9, 11]) 

Y esto funciona a través de índices individuales:

 >>> idx[[0,3,4]] array([82, 94, 31]) 

¿Pero qué pasa si quiero seleccionar los rangos 0:3 y 7: 😕

He intentado:

 >>> idx[[0:3,7:]] SyntaxError: invalid syntax 

¿Hay una forma sencilla de hacer esto, o necesito generarlos por separado y concatenar?

Debe concatenar, ya sea antes o después de la indexación. np.r_ hace fácil

 In [116]: idx=np.array([82, 9, 11, 94, 31, 87, 43, 77, 49, 50]) In [117]: np.r_[0:3,7:10] Out[117]: array([0, 1, 2, 7, 8, 9]) In [118]: idx[np.r_[0:3,7:10]] Out[118]: array([82, 9, 11, 77, 49, 50]) 

np.r_ expande los cortes y los concatena.

Puedes mezclar rebanadas y listas:

 In [120]: np.r_[0:3,7:10,[0,3,4]] Out[120]: array([0, 1, 2, 7, 8, 9, 0, 3, 4]) 

La concatenación antes de la indexación es probablemente más rápida que después, pero para una matriz de 1d como esta, no creo que la diferencia sea significativa.