【问题标题】:How to find mean of each two rows of a numpy array如何找到numpy数组的每两行的平均值
【发布时间】:2021-03-01 21:06:29
【问题描述】:

我有一个很大的 numpy 数组,想要取每两行第二列的平均值并将数组另存为新数组。我想取每两行的平均值,即第 1 行和第 2 行的第二列的平均值。然后,第 3 行和第 4 行的第二列的平均值,依此类推。然后,我想将每两行合并为一个。这对行的第一列和第三列也是相同的。这是我的简化数组:

input= np.array ([[1., 2., 5.],
                  [1., 4., 5.],
                  [4., 10., 3.],
                  [4., 2., 3.],
                  [1., 0., 0.],
                  [1., 1., 0.]])

那么,我想得到:

output= np.array ([[1., 3., 5.],
                   [4., 6., 3.],
                   [1., 0.5, 0.]])

我尝试了以下方法,但根本不成功:

output=np.array([])
for i in range (len(input)-1):
    g=(input[i,1]+input[i+1,1])/2
    output=np.append(g,output)

在此先感谢您的帮助。

【问题讨论】:

    标签: python arrays numpy mean


    【解决方案1】:

    对于两行,我发现这样做更容易:

    (arr[::2] + arr[1::2])/2
    

    【讨论】:

      【解决方案2】:

      使用输入形状的reshape 更健壮的方法

      i= np.array ([[1., 2., 5.],
                    [1., 4., 5.],
                    [4., 10., 3.],
                    [4., 2., 3.],
                    [1., 0., 0.],
                    [1., 1., 0.]])
      
      i.reshape(-1, 2, i.shape[-1]).mean(1)
      
      array([[1. , 3. , 5. ],
             [4. , 6. , 3. ],
             [1. , 0.5, 0. ]])
      

      【讨论】:

      • 亲爱的@Daniel F,感谢您的解决方案。这正是我想要的。我很感激。
      • 然后一定要标记已解决(小复选标记)。
      【解决方案3】:

      您可以重新整形并找到平均值,如下所示:

      import numpy as np
      
      ipt = np.array([[1., 2., 5.],
                      [1., 4., 5.],
                      [4., 10., 3.],
                      [4., 2., 3.],
                      [1., 0., 0.],
                      [1., 1., 0.]])
      result = np.mean(ipt.reshape((3, 2, 3)), axis=1)
      print(result)
      

      输出

      [[1.  3.  5. ]
       [4.  6.  3. ]
       [1.  0.5 0. ]]
      

      附带说明,避免将输入用作变量名,因为它会影响内置输入。

      【讨论】:

      • 亲爱的 Dani Mesejo, 感谢您花时间解决我的问题。我很感激。但是,我没有为我的大阵列运行您的解决方案。我给了我一个重塑错误。
      • 您需要相应地更改尺寸以适应它,在这方面@DanielF 的解决方案更好。
      【解决方案4】:

      取偶数行 (ipt[::2])、奇数行 (ipt[1::2]),将它们相加并除以 2:

      output = (ipt[::2] + ipt[1::2])/2
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-29
        • 2021-01-31
        • 1970-01-01
        • 2017-03-05
        • 1970-01-01
        • 1970-01-01
        • 2015-07-22
        • 2021-11-10
        相关资源
        最近更新 更多