Consider the following script:
import numpy as np
a = np.array([np.nan], dtype=float)
b = np.array([np.nan], dtype=float)
print a == b
a = np.array([np.nan], dtype=object)
b = np.array([np.nan], dtype=object)
print a == b
On my machine this prints out
[False]
[ True]
The first case is clear (as per IEEE-754), but what's going on in the second case? Why are the two NaNs comparing equal?
Python 2.7.3, Numpy 1.6.1 on Darwin.
On newer versions of numpy you get this warning:
FutureWarning: numpy equal will not check object identity in the future. The comparison did not return the same result as suggested by the identity (`is`)) and will change.
my guess is that numpy is using id
test as a shortcut, for object
types before falling back to __eq__
test, and since
>>> id(np.nan) == id(np.nan)
True
it returns true.
if you use float('nan')
instead of np.nan
the result would be different:
>>> a = np.array([np.nan], dtype=object)
>>> b = np.array([float('nan')], dtype=object)
>>> a == b
array([False], dtype=bool)
>>> id(np.nan) == id(float('nan'))
False
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With