代码之家  ›  专栏  ›  技术社区  ›  Hrihaan

子阵列中元素的平均值

  •  0
  • Hrihaan  · 技术社区  · 7 年前

    我有一个数组 a=[1, 2, 3, 4, 5, 6, 7]

    当我把它分成3块时,我得到3个子数组: [array([1, 2, 3]), array([4, 5]), array([6, 7])] .

    [2, 4.5, 6.5] 自从 (1+2+3)/3=2 (4+5)/2=4.5

    我尝试了以下代码:

    import numpy as np
    a=[1, 2, 3, 4, 5, 6, 7]
    a_split=np.array_split(a, 3)
    a_split_avg=np.mean(a_split, axis=1)
    

    我得到以下错误: tuple index out of range

    4 回复  |  直到 7 年前
        1
  •  2
  •   saga    7 年前

    你得到这个错误是因为 np.array_split axis 不会用的。将最后一行替换为:

    a_split_avg = [np.mean(arr) for arr in a_split]
    
        2
  •  4
  •   Divakar    7 年前

    这是一个矢量化的解决方案,它避免了分裂步骤以获得性能,并直接获得分组求和和,从而得到平均值-

    def average_groups(a, N): # N is number of groups and a is input array
        n = len(a)
        m = n//N
        w = np.full(N,m)
        w[:n-m*N] += 1
        sums = np.add.reduceat(a, np.r_[0,w.cumsum()[:-1]])
        return np.true_divide(sums,w)
    

    In [357]: a=[1, 2, 3, 4, 5, 6, 7]
    
    In [358]: average_groups(a, N=3)
    Out[358]: array([2. , 4.5, 6.5])
    
        3
  •  1
  •   Mayank Porwal    7 年前

    试试这个:

    In [1224]: mean_arr = []
    In [1225]: for i in a_split:
          ...:     mean_arr.append(np.mean(i))
    
    In [1226]: 
    
    In [1226]: mean_arr
    Out[1226]: [2.0, 4.5, 6.5]
    
        4
  •  1
  •   rafaelc    7 年前

    你可以用 np.vectorize mean 数组列表中的每个项的函数:

    means = np.vectorize(np.mean)(a_split)
    

    结果是一个列表,其中包含您创建的每个子数组的平均值。