平均n个元素

时间:2019-10-20 13:21:30

标签: python arrays numpy

我有一个类似[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]的numpy数组

假设我要平均3个元素,则目标数组应如下所示:

[2, 2, 2, 5, 5, 5, 8, 8, 8, 10]

请注意,当没有可用的三元组时,我想计算其余元素的平均值

是否可以通过数组操作来做到这一点?

2 个答案:

答案 0 :(得分:0)

您可以reshape数组来使用mean函数,例如:

a = np.arange(1,11)
b = a[:a.size//3*3]
b.shape = (-1,3)
c = np.mean(b, axis=1)
# c == array([2., 5., 8.])

然后将结果重新分配到原始数组中:

c.shape = (-1,1)  # i.e. (len(b), 1)
b[:] = c
print(a)
# array([ 2,  2,  2,  5,  5,  5,  8,  8,  8, 10])

请注意,这是因为ba的子视图。另外,最后一个元素不是您所要求的平均值(我保持不变),但是它很容易修复,例如:

a[9:] = np.mean(a[9:])

答案 1 :(得分:0)

我只是为了好玩而在一个班轮里完成了大部分工作:D *注意,我正在使用sum()来使列表变平..(这是一些怪异的python技巧)

def custom_avg(group: int, arr):
    out = list()
    [out.append(list(np.full( (1, group), np.sum(arr[i:i+group])/ (1 if i + group > len(arr) else group), dtype=int))) for i in range(0, len(arr), group) ]
    return sum(out,[])

享受!祝你好运。