Tuple como índice de matriz multidimensional

Encontré una pregunta muy similar a la mía, pero no exactamente la misma. Éste: aquí Sin embargo, en el caso de ntimes, el tamaño de la matriz coincide con el número de dimensiones a las que apunta la tupla. En mi caso tengo una matriz de 4 dimensiones y una tupla de 2 dimensiones, así:

from numpy.random import rand big_array=rand(3,3,4,5) tup=(2,2) 

Quiero usar la tupla como un índice para las dos primeras dimensiones, e indexar manualmente las dos últimas. Algo como:

 big_array[tup,3,2] 

Sin embargo, obtengo una repetición de la primera dimensión con el índice = 2, a lo largo de la cuarta dimensión (ya que técnicamente no se ha indexado). Esto se debe a que esta indexación está interpretando una indexación doble a la primera dimensión en lugar de un valor para cada dimensión,

 eg. | dim 0:(index 2 AND index 2) , dim 1:(index 3), dim 2:(index 2), dim 3:(no index)| instead of |dim 0(index 2), dim 1(index 2), dim 2:(index 3), dim 3:(index 2)|. 

¿Cómo puedo ‘desempacar’ esta tupla entonces? ¿Algunas ideas? ¡Gracias!

También puede pasar su primera tupla solo para obtener la porción de interés, luego indexarla por separado:

 from numpy.random import rand big_array=rand(3,3,4,5) chosen_slice = (2,2) >>> big_array[ chosen_slice ] array([[ 0.96281602, 0.38296561, 0.59362615, 0.74032818, 0.88169483], [ 0.54893771, 0.33640089, 0.53352849, 0.75534718, 0.38815883], [ 0.85247424, 0.9441886 , 0.74682007, 0.87371017, 0.68644639], [ 0.52858188, 0.74717948, 0.76120181, 0.08314177, 0.99557654]]) >>> chosen_part = (1,1) >>> big_array[ chosen_slice ][ chosen_part ] 0.33640088565877657 

Eso puede ser un poco más legible para algunos usuarios, pero de lo contrario me inclino por la solución de mgilson.

Ya que estás usando numpy :

 big_array[tup+(3,2)] 

Deberia trabajar. Cuando llama a __getitem__ (a través de los corchetes), las cosas se pasan a __getitem__ como una tupla. Solo necesita construir la tuple aquí explícitamente (al agregar tuplas juntas se concatenará en una tupla nueva) y numpy hará lo que quiera.