2017-10-12 3 views
1

J'ai un tableau n*n, et je veux trouver le min dans le tableau, et l'index de la min dans [x,y] FormatPYTHON - Calculer min et l'indice de Min dans un NdArray

Bien sûr, cela peut être fait en utilisant for boucles et en utilisant des variables temporaires, mais je suis à la recherche d'un processus plus sophistiqué pour ce faire.

Exemple -

[[1,2,8], 
    [7,4,2], 
    [9,1,7], 
    [0,1,5], 
    [6,-4,3]] 

je devrais obtenir la sortie suivante -

Output- 
    Min = -4 
    Index = [4,1] 

Puis-je mettre en œuvre quelque chose de similaire?

TIA.

Répondre

2

valeur minimale globale et l'indice

Aplatir le tableau, obtenir l'indice argmin. Récupère les indices row-col correspondants avec np.unravel_index. En outre, indexer dans le tableau aplati avec l'index argmin aplati obtenu précédemment pour la valeur minimale.

def smallest_val_index(a): 
    idx = a.ravel().argmin() 
    return a.ravel()[idx], np.unravel_index(idx, a.shape) 

run échantillon -

In [182]: a 
Out[182]: 
array([[ 1, 2, 8], 
     [ 7, 4, 2], 
     [ 9, 1, 7], 
     [ 0, 1, 5], 
     [ 6, -4, 3]]) 

In [183]: val, indx = smallest_val_index(a) 

In [184]: val 
Out[184]: -4 

In [185]: indx 
Out[185]: (4, 1) 

valeur maximale globale et l'indice

De même, pour obtenir la valeur maximum globale, utilisez argmax -

def largest_val_index(a): 
    idx = a.ravel().argmax() 
    return a.ravel()[idx], np.unravel_index(idx, a.shape) 

Exemple de passage -

In [187]: a 
Out[187]: 
array([[ 1, 2, 8], 
     [ 7, 4, 2], 
     [ 9, 1, 7], 
     [ 0, 1, 5], 
     [ 6, -4, 3]]) 

In [188]: largest_val_index(a) 
Out[188]: (9, (2, 0))