Comment puis-je obtenir la deuxième valeur minimale de chaque colonne? J'ai ce tableau:
A = [[72 76 44 62 81 31]
[54 36 82 71 40 45]
[63 59 84 36 34 51]
[58 53 59 22 77 64]
[35 77 60 76 57 44]]
Je souhaite avoir une sortie comme:
A = [54 53 59 36 40 44]
python
arrays
python-3.x
list
Mr Dan
la source
la source
Réponses:
Essayez ceci, en une seule ligne:
en action:
et si vous avez une valeur en double, par exemple:
Si vous devez ignorer les deux
35
, vous pouvez utiliserset()
:la source
Les opérations sur les
numpy
tableaux doivent être effectuées avec desnumpy
fonctions, alors regardez celle-ci:la source
numpy
, je pense que la solutionlambda
doit ralentirheapq.nsmallest
. Il semble préférable de tout garder rapidenumpy
vous pouvez utiliser heapq.nsmallest
production:
J'ai ajouté un benchmark simple pour comparer les performances des différentes solutions déjà publiées:
Utiliser
zip
avec lasorted
fonction est la solution la plus rapide pour les petites listes 2D tout en utilisantzip
avec lesheapq.nsmallest
émissions pour être le meilleur sur les grandes listes 2Dla source
J'espère avoir bien compris votre question, mais dans tous les cas, voici ma solution, je suis sûr qu'il existe une façon plus élégante de le faire, mais cela fonctionne
la source
En supposant que ce
A
soit lenumpy.array
cas (si cela se vérifie, envisagez d'ajouter unenumpy
balise à votre question), vous pouvez utiliser laapply_along_axis
méthode suivante:Notez que j'ai utilisé heapq.nsmallest car il fait autant de tri que nécessaire pour obtenir 2 plus petits éléments, contrairement à
sorted
ce qui fait le tri complet.la source
Mise à jour : utiliser
set
pour empêcher la duplication et la transposition de la liste à l'aidezip(*A)
ancien: deuxième élément minimum dans chaque ligne
la source