Comparing numpy arrays containing NaN Comparing numpy arrays containing NaN numpy numpy

Comparing numpy arrays containing NaN


Alternatively you can use numpy.testing.assert_equal or numpy.testing.assert_array_equal with a try/except:

In : import numpy as npIn : def nan_equal(a,b):...:     try:...:         np.testing.assert_equal(a,b)...:     except AssertionError:...:         return False...:     return TrueIn : a=np.array([1, 2, np.NaN])In : b=np.array([1, 2, np.NaN])In : nan_equal(a,b)Out: TrueIn : a=np.array([1, 2, np.NaN])In : b=np.array([3, 2, np.NaN])In : nan_equal(a,b)Out: False

Edit

Since you are using this for unittesting, bare assert (instead of wrapping it to get True/False) might be more natural.


For versions of numpy prior to 1.19, this is probably the best approach in situations that don't specifically involve unit tests:

>>> ((a == b) | (numpy.isnan(a) & numpy.isnan(b))).all()True

However, modern versions provide the array_equal function with a new keyword argument, equal_nan, which fits the bill exactly.

This was first pointed out by flyingdutchman; see his answer below for details.


The easiest way is use numpy.allclose() method, which allow to specify the behaviour when having nan values. Then your example will look like the following:

a = np.array([1, 2, np.nan])b = np.array([1, 2, np.nan])if np.allclose(a, b, equal_nan=True):    print('arrays are equal')

Then arrays are equal will be printed.

You can find here the related documentation