I\'m simply trying to use a masked array to filter out some nan
entries.
import numpy as np
# x = [nan, -0.35, nan]
x = np.ma.masked_equal(x, np.nan)
You can use np.ma.masked_invalid:
import numpy as np
x = [np.nan, 3.14, np.nan]
mx = np.ma.masked_invalid(x)
print(repr(mx))
# masked_array(data = [-- 3.14 --],
# mask = [ True False True],
# fill_value = 1e+20)
Alternatively, use np.isnan(x)
as the mask=
parameter to np.ma.masked_array
:
print(repr(np.ma.masked_array(x, np.isnan(x))))
# masked_array(data = [-- 3.14 --],
# mask = [ True False True],
# fill_value = 1e+20)
Why doesn't your original approach work? Because, rather counterintuitively, NaN
is not equal to NaN
!
print(np.nan == np.nan)
# False
This is actually part of the IEEE-754 definition of NaN
Here is another alternative without using mask:
import numpy as np
#x = [nan, -0.35, nan]
xmask=x[np.logical_not(np.isnan(x))]
print(xmask)
Result:
array([-0.35])