Ich möchte Outliner aus einer Liste ersetzen. Daher definiere ich eine obere und untere Grenze. Jetzt wird jeder Wert über upper_bound
und unter lower_bound
durch den gebundenen Wert ersetzt. Mein Ansatz bestand darin, dies in zwei Schritten mit einem numply-Array zu tun.Pythonischer Weg, Listenwerte durch obere und untere Grenze zu ersetzen (Klemmen, Clipping, Thresholding)?
Jetzt frage ich mich, ob es möglich ist, dies in einem Schritt zu tun, wie ich denke, es könnte Leistung und Lesbarkeit verbessern.
Gibt es einen kürzeren Weg, dies zu tun?
import numpy as np
lowerBound, upperBound = 3, 7
arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
arr[arr > upperBound] = upperBound
arr[arr < lowerBound] = lowerBound
# [3 3 3 3 4 5 6 7 7 7]
print(arr)
Während es schön ist, dass es eine kompilierte "Clip" -Methode gibt, gibt es nichts Un-Pythonic über Ihren Code. Es ist eine vollkommen gute Verwendung von "numpy" und genauso lesbar (für einen erfahrenen Benutzer). Behalte dieses Konzept in deiner Toolbox. Es funktioniert in Fällen, die nicht ganz zum Clip-Modell passen. – hpaulj
Dieser Vorgang wird allgemein als *** clamping ***, *** clipping *** oder *** *** thresholding *** – smci
bezeichnet. Sie sollten die 'clip' Methode verwenden, aber es gibt einen anderen Grund als die Geschwindigkeit; Ihr Code ist elegant, erzeugt aber ein intermediäres Array mit 'arr> upperBound', das ein Problem darstellen kann, wenn das Array groß wird. –