Wie kann ich den zweiten Mindestwert aus jeder Spalte erhalten? Ich habe dieses Array:
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]]
Ich möchte eine Ausgabe haben wie:
A = [54 53 59 36 40 44]
python
arrays
python-3.x
list
Herr Dan
quelle
quelle
Antworten:
Versuchen Sie dies in nur einer Zeile:
in Aktion:
und wenn Sie einen doppelten Wert haben, zum Beispiel:
Wenn Sie beide
35
s überspringen müssen , können Sie Folgendes verwendenset()
:quelle
Operationen an
numpy
Arrays sollten mitnumpy
Funktionen ausgeführt werden. Sehen Sie sich also Folgendes an:quelle
numpy
, ich denke, die Lösunglambda
muss verlangsamt werdenheapq.nsmallest
. Scheint am besten, alles schnell zu haltennumpy
Sie können heapq.nsmallest verwenden
Ausgabe:
Ich habe einen einfachen Benchmark hinzugefügt, um die Leistung der verschiedenen bereits veröffentlichten Lösungen zu vergleichen:
Die Verwendung
zip
mitsorted
Funktion ist die schnellste Lösung für kleine 2D-Listen, während die Verwendungzip
mitheapq.nsmallest
Shows die beste Lösung für große 2D-Listen istquelle
Ich hoffe, ich habe Ihre Frage richtig verstanden, aber so oder so ist hier meine Lösung. Ich bin mir sicher, dass es einen eleganteren Weg gibt, dies zu tun, aber es funktioniert
quelle
Unter der Annahme , dass
A
istnumpy.array
(falls dies zutrifft beachten Sie bitte das Hinzufügennumpy
Tag zu Ihrer Frage) dann könnten Sie verwendenapply_along_axis
für die folgende Art und Weise:Beachten Sie, dass ich heapq.nsmallest verwendet habe, da es so viel sortiert wie erforderlich, um 2 kleinste Elemente zu erhalten, im Gegensatz zu
sorted
denen, die die Sortierung vollständig durchführen.quelle
Aktualisiert : Verwenden Sie
set
diese Option , um zu verhindern, dass Listen mit dupliziert und transponiert werdenzip(*A)
alt: zweites Mindestelement in jeder Zeile
quelle