Perché mi appare il seguente:numpy.isnan (valore) non uguale al valore == numpy.nan?
>>> v
nan
>>> type(v)
<type 'numpy.float64'>
>>> v == np.nan
False
>>> np.isnan(v)
True
avrei pensato i due dovrebbero essere equivalenti?
Perché mi appare il seguente:numpy.isnan (valore) non uguale al valore == numpy.nan?
>>> v
nan
>>> type(v)
<type 'numpy.float64'>
>>> v == np.nan
False
>>> np.isnan(v)
True
avrei pensato i due dovrebbero essere equivalenti?
nan != nan
. È così che vengono definiti i confronti di uguaglianza su nan
. È stato deciso che questo risultato è più conveniente per gli algoritmi numerici rispetto all'alternativa. Questo è specificamente il motivo per cui esiste isnan
.
Grazie! Questo mi ha completamente confuso per un po 'durante il debug :) –
A proposito, questo è probabilmente dovuto a IEEE 754 che afferma: * Sono possibili quattro relazioni reciprocamente esclusive: minori di, uguali, maggiori e non ordinate. L'ultimo caso si verifica quando almeno un operando è NaN. Ogni NaN si confronterà non ordinato con tutto, incluso se stesso. * Modifica: Sembra che sia stato battuto per ~ 2 ore da un commento con un link che va più nel dettaglio - vedi il commento di Joe Kington alla domanda. – jedwards
Vedere anche: http://stackoverflow.com/a/1573715/325565 (non direttamente correlato a Python, ma scritto da un membro del comitato IEEE-754 che ha definito il motivo per cui è così) –
Immagino ha senso che due valori indefiniti non possano essere confrontati come identici perché sono per definizione indefiniti. Solo un po 'di confusione quando ricevi un errore nan! = Nan la prima volta! –
correlati: http://stackoverflow.com/q/13003202/674039 – wim