Instanzen einer bestimmten Zeile in einem NumPy-Array effizient finden
Bei der Arbeit mit NumPy-Arrays muss möglicherweise festgestellt werden, ob die Das Array enthält eine bestimmte Zeile, aber die Standardmethode contains für ndarray wirft Fragen auf. In diesem Artikel werden effiziente und pythonische Lösungen für dieses Problem vorgestellt.
Ein Ansatz besteht darin, das NumPy-Array mithilfe von .tolist() in eine Python-Liste zu konvertieren und Mitgliedschaftsprüfungen für die Liste durchzuführen.
a = np.array([[1,2],[10,20],[100,200]]) [1,2] in a.tolist() # Returns True [1,20] in a.tolist() # Returns False
Eine andere Methode besteht darin, eine Ansicht auf das Array zu verwenden und die Funktion .all(1) anzuwenden, um jede Zeile elementweise mit der Zielzeile zu vergleichen .
any((a[:]==[1,2]).all(1)) # Returns True any((a[:]==[1,20]).all(1)) # Returns False
Zusätzlich kann man über die NumPy-Liste generieren, um eine potenzielle Leistungssteigerung zu erzielen. Dieser Ansatz kann jedoch ineffizient sein, wenn ein Ergebnis nicht frühzeitig gefunden wird.
any(([1,2] == x).all() for x in a) # Stops on first occurrence
Schließlich bieten die logischen Funktionen von NumPy eine übersichtliche Möglichkeit, Vergleiche durchzuführen.
any(np.equal(a,[1,2]).all(1)) # Returns True
Benchmark-Ergebnisse zeigen, dass die Numpy-Routinen unabhängig von Treffer- oder Misserfolgsszenarien eine konsistente Suchgeschwindigkeit beibehalten. Die View-, Logic Equal- und Python-in-Operator-Ansätze sind hinsichtlich der Effizienz vergleichbar, während der Generator über NumPy für vollständige Array-Suchen nicht empfohlen wird.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3