Il existe de nombreuses solutions pour ce faire pour un seul tableau, mais qu'en est-il d'une matrice, telle que:
>>> k
array([[ 35, 48, 63],
[ 60, 77, 96],
[ 91, 112, 135]])
Vous pouvez utiliser k.max()
, mais bien sûr, cela ne renvoie que la valeur la plus élevée, 135
. Et si je veux le deuxième ou le troisième?
Vous pouvez aplatir la matrice puis la trier:
>>> k = np.array([[ 35, 48, 63],
... [ 60, 77, 96],
... [ 91, 112, 135]])
>>> flat=k.flatten()
>>> flat.sort()
>>> flat
array([ 35, 48, 60, 63, 77, 91, 96, 112, 135])
>>> flat[-2]
112
>>> flat[-3]
96
Comme dit , np.partition
devrait être plus rapide (au plus O(n) temps d'exécution):
np.partition(k.flatten(), -2)[-2]
devrait renvoyer le 2e plus grand élément. (partition
garantit que l'élément numéroté est en position, tous les éléments précédents sont plus petits et tous ceux situés derrière sont plus grands).
Une autre façon de faire cela lorsque des éléments répétés sont présentés dans le tableau à disposition . Si nous avons quelque chose comme
a = np.array([[1,1],[3,4]])
alors le deuxième plus grand élément sera 3, pas 1.
Vous pouvez également utiliser l'extrait suivant:
second_largest = sorted(list(set(a.flatten().tolist())))[-2]
D'abord, aplatissez la matrice, puis ne laissez que des éléments uniques, puis revenez à la liste des éléments mutables, triez-la et prenez le deuxième élément. Cela devrait renvoyer le deuxième plus gros élément de la fin, même s'il y a des éléments répétitifs dans le tableau.
import numpy as np
a=np.array([[1,2,3],[4,5,6]])
a=a.reshape((a.shape[0])*(a.shape[1])) # n is the nth largest taken by us
print(a[np.argsort()[-n]])