2010-01-15 15 views
3

De nombreuses méthodes de tableau retournent un seul index malgré le fait que le tableau est multidimensionnel. Par exemple:Numpy: convertit l'index dans une dimension en plusieurs dimensions

a = rand(2,3) 
z = a.argmax() 

Pour deux dimensions, il est facile de trouver les indices de la matrice de l'élément maximal:

a[z/3, z%3] 

Mais pour plus de dimensions, il peut devenir ennuyeux. Est-ce que Numpy/Scipy a un moyen simple de renvoyer les indices dans plusieurs dimensions en fonction d'un indice dans une dimension (effondrée)? Merci.

+0

Peut-être ennuyeux, mais tout à fait faisable. –

+0

En effet, c'est! Voir ci-dessous. –

Répondre

5

L'a reçu!

a = X.argmax() 
(i,j) = unravel_index(a, X.shape) 
+1

Merci, c'est intéressant, ça m'aide à résoudre certains problèmes que je ne pouvais pas résoudre avec ma propre solution sans certains hacks, où la bande de b est une extension de la forme d'un –

1

Je ne sais pas d'une fonction intégrée qui fait ce que vous voulez, mais où ce est venu pour moi, je me suis aperçu que ce que je voulais vraiment faire était le suivant:

donné 2 tableaux a, b ayant la même forme, de trouver l'élément de b qui est en la même position (même [i, j, k ...] la position) comme élément maximum d'un

Pour cela, la solution rapide numpy-ish est:

j = a.flatten().argmax() 
corresponding_b_element = b.flatten()[j] 

Vince Marchetti