Python: Max / Min-Built-in-Funktionen hängen von der Parameterreihenfolge ab
max(float('nan'), 1)
ergibt nan
max(1, float('nan'))
1 ausgewertet
Ist es das beabsichtigte Verhalten?
Danke für die Antworten.
max
wirft eine Ausnahme wenn die iterierbar ist leer. Warum auch nicht-Python - max
eine Ausnahme auslösen, wenn nan
vorhanden ist? Oder zumindest etwas nützliches zu tun, wie zurück nan
oder ignorieren nan
. Das aktuelle Verhalten ist sehr unsicher und scheint völlig unvernünftig.
Fand ich eine noch mehr überraschende Konsequenz dieses Verhaltens, also ich habe gerade gebucht ein stellt sich die Frage,.
InformationsquelleAutor der Frage max | 2010-11-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Schwimmer
nan
ist weder größer noch kleiner als die integer -1
.max
startet, indem Sie das erste element, und nur ersetzt, wenn es findet ein element, das ist streng größer.Seit
nan
ist nicht größer als 1, wird 1 zurückgegeben.Da 1 nicht größer als
nan
nan
zurückgegeben.PS. Beachten Sie, dass
np.max
behandeltfloat('nan')
anders:aber wenn Sie möchten, zu ignorieren
np.nan
s, die Sie verwenden könnennp.nanmax
:InformationsquelleAutor der Antwort unutbu
Habe ich noch nicht gesehen, dies vor, aber es macht Sinn. Beachten Sie, dass
nan
ist eine sehr seltsame Objekt:Ich würde sagen, dass das Verhalten der
max
ist nicht definiert in diesem Fall-welche Antwort würden Sie erwarten? Die einzig sinnvolle Verhalten ist anzunehmen, dass die Vorgänge sind antisymmetrische.Beachten Sie, dass Sie sich reproduzieren können dieses Verhalten, indem Sie eine gebrochen-Klasse:
InformationsquelleAutor der Antwort Katriel
Max arbeitet auf folgende Weise:
Das erste Element wird als maxval und dann die nächste ist im Vergleich zu diesem Wert. Die comparation wird immer False zurück:
Also, wenn der erste Wert ist "nan", dann (seit der comparation gibt false zurück), wird diese nicht ersetzt, auf den nächsten Schritt.
OTOH, wenn 1 ist der erste, passiert das gleiche: aber in diesem Fall, seit dem 1 gesetzt wurde, wird die maximale.
Können Sie dies überprüfen, in der python-code, einfach nachschlagen, die Funktion min_max in Python/bltinmodule.c
InformationsquelleAutor der Antwort terminus