In newer versions of numpy you will 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.
I assume numpy uses id
test as a shortcut for object
types before returning to the __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 will 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
source share