Numpy: obtenir la colonne et de la ligne de l'indice de la valeur minimale d'un tableau 2D

Par exemple,

x = array([[1,2,3],[3,2,5],[9,0,2]])
some_func(x) gives (2,1)

Je sais on peut le faire par une fonction personnalisée:

def find_min_idx(x):
    k = x.argmin()
    ncol = x.shape[1]
    return k/ncol, k%ncol

Cependant, je me demande si il y a un numpy intégré dans la fonction qui fait cela plus rapidement.

Grâce.

EDIT: merci pour les réponses. J'ai testé leurs vitesses comme suit:

%timeit np.unravel_index(x.argmin(), x.shape)
#100000 loops, best of 3: 4.67 µs per loop

%timeit np.where(x==x.min())
#100000 loops, best of 3: 12.7 µs per loop

%timeit find_min_idx(x) # this is using the custom function above
#100000 loops, best of 3: 2.44 µs per loop

Semble que la fonction personnalisée est effectivement plus rapide que unravel_index() et où(). unravel_index() n'choses semblables que la fonction personnalisée, plus la charge de la vérification des arguments supplémentaires. où() est capable de retourner plusieurs indices mais il est beaucoup plus lent pour mon but. Peut-être pur code python n'est pas lent pour faire juste deux arithmétique simple et la fonction personnalisée approche est aussi rapide que l'on peut obtenir.

np.where(x == np.min(x))?

OriginalL'auteur N. H. | 2015-05-12