【问题标题】:replace masked with nan in numpy masked_array在 numpy masked_array 中用 nan 替换 masked
【发布时间】:2019-10-06 09:05:12
【问题描述】:
>> masks = [[1,1],[0,0]]    
>> [np.ma.masked_array(data=np.array([1.0,2.0]), mask=m, fill_value=np.nan).mean() for m in masks]
   [masked, 1.5]

我想用nan 替换masked 结果。有没有办法直接用 numpy 的masked_array 做到这一点?

【问题讨论】:

    标签: python numpy masked-array


    【解决方案1】:
    In [232]: M = np.ma.masked_array(data=np.array([1.0,2.0]),mask=[True, False])
    

    filled 方法用填充值替换掩码值:

    In [233]: M.filled()                                                         
    Out[233]: array([1.e+20, 2.e+00])
    In [234]: M.filled(np.nan)         # or with a value of your choice.                                                   
    Out[234]: array([nan,  2.])
    

    或者和你一样,在定义数组时指定填充值:

    In [235]: M = np.ma.masked_array(data=np.array([1.0,2.0]),mask=[True, False],
         ...:  fill_value=np.nan)                                                
    In [236]: M                                                                  
    Out[236]: 
    masked_array(data=[--, 2.0],
                 mask=[ True, False],
           fill_value=nan)
    In [237]: M.filled()                                                         
    Out[237]: array([nan,  2.])
    

    掩码均值法跳过填充值:

    In [238]: M.mean()                                                           
    Out[238]: 2.0
    In [239]: M.filled().mean()                                                  
    Out[239]: nan
    In [241]: np.nanmean(M.filled())    # so does the `nanmean` function
    In [242]: M.data.mean()             # mean of the underlying data                                                      
    Out[242]: 1.5
    

    【讨论】:

      【解决方案2】:

      我认为你可以做到np.ones

      masks=np.array([[1,1],[0,0]])
      
      np.ma.masked_array(data=np.array([1.0,2.0])*np.ones(masks.shape), mask=masks, fill_value=np.nan).mean(axis=1)
      Out[145]: 
      masked_array(data=[--, 1.5],
                   mask=[ True, False],
             fill_value=1e+20)
      

      【讨论】:

        猜你喜欢
        • 2011-10-05
        • 2015-03-02
        • 2012-03-21
        • 2018-07-12
        • 1970-01-01
        • 1970-01-01
        • 2013-09-12
        • 2013-04-19
        • 1970-01-01
        相关资源
        最近更新 更多