Le moyen le plus rapide pour trouver le n-ième plus grande valeur dans une Matrice numpy
Il y a beaucoup de solutions pour le faire pour un seul tableau, mais quid d'une matrice, tels que:
>>> k
array([[ 35, 48, 63],
[ 60, 77, 96],
[ 91, 112, 135]])
Vous pouvez utiliser k.max()
, mais bien sûr cela ne renvoie la valeur la plus élevée, 135
. Que faire si je veux la deuxième ou la troisième?
Jetez un oeil à cette réponse: stackoverflow.com/questions/26603747/...
OriginalL'auteur thefoxrocks | 2015-10-17
Vous devez vous connecter pour publier un commentaire.
Vous pouvez aplatir la matrice, puis de les trier:
np.partition
peut être plus rapide - il le fait d'une partielle de tri, il suffit simplement de diviser le tableau en 2 parties.Ooh j'aime ça.
Cette méthode pourrait être mieux si il veut saisir plusieurs éléments, cependant, disent les 2ème, 3ème, etc... car ils seront tous disponibles sans autres opérations autres que de l'indexation.
Est-il un moyen efficace
numpy
de le faire sans avoir recours à la matrice?bien sûr, l'utilisation
np.sort
qui renvoie un tableau trié au lieu de la méthode de la baie, qui s'aplatit en place:sorted_flat = np.sort(flat)
OriginalL'auteur rofls
Comme dit,
np.partition
devrait être plus rapide (au plus O(n) temps de fonctionnement):doit retourner le 2ème plus grand élément. (
partition
garantit que le numéro de l'élément est en position, tous les éléments avant sont plus petites, et de derrière sont plus gros).oui, optimal de tri (par exemple, mergesort) prend
O(n log(n))
>
should return the 2nd largest element
— est-il vrai? À partir de documentation:The ordering of the elements in the two partitions is undefined.
exactement. La seule position qui est fixe est la 2ème position. Les partitions vers la gauche et la droite sont toujours plus petits et plus gros, mais non ordonnée.
OriginalL'auteur serv-inc
Veuillez vérifier
arsort
syntaxeOriginalL'auteur Lakshay Chawla
Une autre manière de procéder lors de la répétition d'éléments sont présentés dans le tableau à la main.
Si nous avons quelque chose comme
puis le deuxième plus grand élément sera de 3, pas 1.
Alternativement, on peut utiliser le code suivant:
D'abord, aplatir la matrice, puis de ne plus laisser que des éléments uniques, puis retour à la mutable liste, trier et prendre le deuxième élément. Il doit retourner le deuxième plus grand élément de la fin même si il y a répétition d'éléments dans le tableau.
OriginalL'auteur drsealks