Python Numpy mask NaN not working

后端 未结 2 669
庸人自扰
庸人自扰 2021-02-15 12:35

I\'m simply trying to use a masked array to filter out some nanentries.

import numpy as np
# x = [nan, -0.35, nan]
x = np.ma.masked_equal(x, np.nan)         


        
2条回答
  •  星月不相逢
    2021-02-15 13:04

    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

提交回复
热议问题