【问题标题】:Stacking 2D numpy arrays to use nanmean堆叠 2D numpy 数组以使用 nanmean
【发布时间】:2013-08-12 10:27:27
【问题描述】:

我有两个数组,我想取它们的每个单元格的平均值,但要考虑到 NaN。

我的两个数组是:

In [267]: a = np.array([ [1, 2, np.nan], [np.nan, 5, 6], [np.nan, np.nan, np.nan]])

In [268]: a
Out[268]: 
array([[  1.,   2.,  nan],
       [ nan,   5.,   6.],
       [ nan,  nan,  nan]])

In [269]: b = np.array( [ [2, np.nan, 6], [8, np.nan, 12], [14, 16, np.nan]])

In [270]: b
Out[270]: 
array([[  2.,  nan,   6.],
       [  8.,  nan,  12.],
       [ 14.,  16.,  nan]])

如果我不想考虑 NaN,那么我可以这样做:

In [271]: (a+b)/2
Out[271]: 
array([[ 1.5,  nan,  nan],
       [ nan,  nan,  9. ],
       [ nan,  nan,  nan]])

但是,我需要进行平均计算,以便 mean(2.5, nan) == 2.5 - 因此 NaN 被忽略,除非我有两个 NaN 在这种情况下 mean(nan, nan) == nan

因此,我想得到的结果是:

Out[271]: 
    array([[ 1.5,  2,  6],
           [ 8,  5,  9. ],
           [ 14,  16,  nan]])

scipy.stats.nanmean 似乎可以做到这一点。但是,要做到这一点,我认为我需要正确堆叠阵列。我有两个 3 x 3 阵列,我想我需要创建一个 2 x 3 x 3 阵列 - 对吗?我似乎无法将这些数组堆叠起来以创建具有这些维度的结果 - 我尝试了 np.dstack 以及各种其他技术,但似乎没有任何效果。

我怀疑我在做一些愚蠢的事情 - 关于如何解决这个问题的任何想法?

【问题讨论】:

    标签: python arrays numpy scipy


    【解决方案1】:

    我使用 np.array 组合了数组:

    >>> c=np.array([a,b])
    array([[[  1.,   2.,  nan],
            [ nan,   5.,   6.],
            [ nan,  nan,  nan]],
    
           [[  2.,  nan,   6.],
            [  8.,  nan,  12.],
            [ 14.,  16.,  nan]]])
    
    >>> scipy.stats.nanmean(c,axis=0)
    array([[  1.5,   2. ,   6. ],
           [  8. ,   5. ,   9. ],
           [ 14. ,  16. ,   nan]])
    

    【讨论】:

      【解决方案2】:

      您需要跨新轴(第三维 - 轴 2)连接数组。然后,您可以将nanmean 带到此维度。

      In [1]: c = np.concatenate([a[..., None], b[..., None]], axis=2)
      In [2]: scipy.stats.nanmean(c, axis=2)
      Out[3]: 
      array([[  1.5,   2. ,   6. ],
             [  8. ,   5. ,   9. ],
             [ 14. ,  16. ,   nan]])
      

      【讨论】:

        猜你喜欢
        • 2018-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-16
        • 1970-01-01
        • 2018-06-02
        • 1970-01-01
        • 2013-05-12
        相关资源
        最近更新 更多